2009-08-11 8 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 

コードから「レスキュー」を削除することができない場合、このシナリオのテストケースを作成するにはどうすればよいですか?

「レスキュー」をコメントアウトすると、私にとって好ましい結果が得られます。

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

関連する問題