2009-08-11 2 views
0

I 해당 테스트 케이스에 다음과 같은 코드가 있습니다 때문에 루틴 '구조'의 존재에테스트 케이스 문제 예외가 처리 할 때

class XXX 
    attr_accessor :source 
    def check 
     begin 
      raise ArgumentError, "No source specified." \ 
       unless @source.empty? != true 
      puts "Passed" 
     rescue 
      print "Error: ",$!, "\n" 
     end 
    end 
end 

class TestXXX < Test::Unit::TestCase 
    def setup 
     @x = XXX.new 
    end 

    def test_check 
     assert_nil(@x.source) 
     assert_raise(NoMethodError) { @x.check } 
    end 
end 

assert_raise에 다음과 같은 결과를 생성합니다 테스트 케이스 실행을 :

 
Started 
.Error: undefined method `empty?' for nil:NilClass 
F 
Finished in 0.01 seconds. 

    1) Failure: 
test_check:18 exception expected but none was thrown. 

1 tests, 2 assertions, 1 failures, 0 errors 

코드에서 '구조'를 제거 할 수 없는데 어떻게이 시나리오에 대한 테스트 케이스를 작성합니까?

'rescue'라고 말하면 나에게 유리한 결과가 나온다. 방법의 실제 행동

class XXX 
    attr_accessor :source 
    def check 
     begin 
      raise ArgumentError, "No source specified." \ 
       unless @source.empty? != true 
      puts "Passed" 
     #rescue 
     # print "Error: ",$!, "\n" 
     end 
    end 
end 
 
Started 
.. 
Finished in 0.0 seconds. 

1 tests, 2 assertions, 0 failures, 0 errors 

답변

2

시험. 인쇄 할 때 예외가 발생하지 않으므로 확인해야합니다. mock 개체가 필요합니까?

+0

나는 메서드의 실제 동작을 테스트해야한다고 생각합니다. 나는 실제로 메소드에 전달 된 모든 잘못된 입력을 테스트하려고하고 처리 할 수 ​​있는지 확인하려고했습니다. 미안 해요, 초보자가 루비에 방금 tdd에 내 손을 담그고 있습니다. :) –

+0

잘못된 입력을 모두 테스트하는 것이 정확합니다. 잘못된 입력에 대한 올바른 동작을 확인하는 것입니다. – djna

관련 문제