2016-09-27 9 views
1

私はJUNIT 4を使用しています。以下のコードを使用して例外をアサートしようとしましたが、動作しませんでした。JUNIT - 例外をアサートする

@Rule 
public ExpectedException thrown = ExpectedException.none(); 
thrown.expect(ApplicationException.class); 

ただし、以下のように注釈を付けると効果があり、テストに合格しました。

@Test(expected=ApplicationException.class) 

何か不足している場合は教えてください。

import org.junit.Rule; 
import org.junit.rules.ExpectedException; 

public class Test 
{ 

    @Rule 
    public ExpectedException exception = ExpectedException.none(); 

    @org.junit.Test 
    public void throwsIllegalArgumentExceptionIfIconIsNull() 
    { 


     exception.expect(IllegalArgumentException.class); 
     toTest(); 
    } 

    private void toTest() 
    { 
     throw new IllegalArgumentException(); 
    } 
} 
+0

あなたは[mcve]を投稿できますか? – Tunaki

+0

申し訳ありませんが、わかりやすい完全な例はデバッグが簡単だったはずです。 –

答えて

1

次のコードは例外ルールを使用する最小の例です。

public class Test 
{ 

    @Rule 
    public ExpectedException exception = ExpectedException.none(); 

    @org.junit.Test 
    public void throwsIllegalArgumentExceptionIfIconIsNull() 
    { 
     exception.expect(IllegalArgumentException.class); 
     toTest(); 
    } 

    private void toTest() 
    { 
     throw new IllegalArgumentException(); 
    } 
} 

(Wiki entry about rules)

+0

ありがとうございました!私はexception.expect(IllegalArgumentException.class)を配置しました。 toTest()の下で今すぐ愚かなことを実現してください! –

1

別のアプローチを参照してください(とシンプルなの?)ルールを使用すると、あなたは、例外が発生することが予想されるコールの後に()が失敗に配置することです。例外が発生した場合、テストメソッドは成功します(失敗することはありません)。例外が発生せず、fail()ステートメントに達すると、テストは失敗します。

+0

私は、例外の種類、コード、メッセージも検証したいと考えていました。あなたが提案したアプローチで可能でしょうか?ありがとう。 –

+0

リンクされた重複した質問/回答を表示する - これはあなたが探しているものです –