2011-12-08 4 views
2

Rubyで書かれたメソッドをTest :: Unitを使ってユニットテストしているとします。このメソッドは、複数の理由でSystemExitを発生させることができますが、それをスローする理由を一意に識別します。Exceptionです。私は、例外が発生していることを主張するためにこれを行うことができます知っている:Test :: Unitを介して例外のメッセージがRubyの既知の文字列と一致するかどうかを確認してください

assert_raises(SystemExit) { boo() } 

しかし、これはboo()SystemExitスローすべてのケースに一致します。 boo()abort("reason 1")からabort("reason 2")になったケースをどのように区別できますか?

答えて

3

begin..rescueでトラップしてください。繰り返し行う必要がある場合は、ヘルパーメソッドを作成します。

begin 
    boo() 
rescue SystemExit => e 
    assert_equal(e.message, "This message") 
end 
+0

感謝のように働いた - ありがとう!これを自動的に行ったTest :: Unitに何かが組み込まれているかどうかは分かりませんでしたが、これもうまくいきます! –

+0

'#assert_raises_with_message'を定義することもできます:) – d11wtq

2

assert_raisesヘルパーはすでに、それはそれを自分で救出/開始する

e = assert_raises(SystemExit) { boo() } 
assert_equal("Reason 1", e.message) 

不要をキャッチしていないことをあなたの例外を返します。

関連する問題