2016-11-01 6 views
1

のJunitテストでは、IOexceptionがテスト中のオブジェクトによってスローされている場合にのみ失敗するテストケースがあります。@Testを使用して、

したがって、テスト対象オブジェクトがIllegalStateException(またはその他のエラーまたは例外)をスローする場合、テストケースはOKですが、テスト対象オブジェクトがIOexceptionをスローすると、テストケースが失敗する必要があります。

どうすればいいですか?

ありがとうございます。

+0

コードを表示できますか? –

答えて

0

あなたは例外のIOExceptionされていない場合、あなたはIOExceptionをキャッチし、以下のようにfail()をアサートすることによってそれを行うことができます失敗したいと:

@Test 
public void yourTestScenario() { 
    try { 
     //code that throws IOException and other Exceptions 
    } catch(IOException ioexe) { 
     Assert.fail(); 
    } catch(Exception exe) { 
     //Ignore 
    } 
} 
+0

これは反パターンです。 JUnitまたはAssertJを使用して、スローされた例外を検証できます。 –

+0

あなたは明確に質問しましたか?彼は期待した条件ではなく、IOException条件ではないことを望んでおり、どちらも単一の方法で処理したいと考えています – developer

+0

提案された回答をご覧ください。テストメソッドでtry/catchを使用するのは魅力的ですが、おそらく最良の答えではありません。 –

0

あなたが予想される例外ルール

を使用することができます
@Rule 
public ExpectedException expected = new ExpectedException(); 


@Test 
public void doSomethingWithNoIOException() { 
    // we expect an exception that's NOT an instance of IOException 
    // you'll need to static import the hamcrest matchers referenced below 
    expected.expect(not(instanceOf(IOException.class)); 

    // call the method under test 
    callSomething(); 
} 
+0

私はこれを知っていますが、このアプローチを使用することによって得られる利点は何ですか?私はそれが完全に意見に基づいていると思うし、我々はいずれかのアプローチに従うことができます – developer

+0

あなたが議論を開始しようとしているようです。上記はテストフレームワークを使用しています。 try/catchの代わりに、テストフレームワークの外部で動作する傾向があります。私の好みは、あなたが両方の世界のベストを持つことができるところでAssertJを使うことです。 –

関連する問題