予期しない例外はテストの失敗であるため、あなたはそれをキャッチする必要も、もう1つもキャッチしたくありません。 str
は簡単なテストの失敗となり、それに小数点を持っているのでservice
まで
@Test
public void canConvertStringsToDecimals() {
String str = "1.234";
Assert.assertEquals(1.234, service.convert(str), 1.0e-4);
}
はIllegalArgumentException
をスローしません。
予期しない例外は、expected
オプションの引数@Test
で処理する必要があります。
@Test(expected=NullPointerException.class)
public void cannotConvertNulls() {
service.convert(null);
}
プログラマは怠け者だったとException
を投げ、または彼はservice
リターン0.0
を持っていた場合、テストは失敗します。 NPE
のみが成功します。予想される例外のサブクラスも機能することに注意してください。 NPE
ではまれですが、IOException
とSQLException
と共通です。
まれに特定の例外メッセージをテストする場合は、新しいExpectedException
JUnit @Rule
を使用します。今
@Rule
public ExpectedException thrown= ExpectedException.none();
@Test
public void messageIncludesErrantTemperature() {
thrown.expect(IllegalArgumentException.class);
thrown.expectMessage("-400"); // Tests that the message contains -400.
temperatureGauge.setTemperature(-400);
}
設定温度はIAE
をスローし、メッセージは、ユーザが設定しようとしていた温度が含まれていない限り、テストは失敗します。このルールは、より洗練された方法で使用できます。
あなたの例では、最高で扱うことができます。
private void testNumber(String word, int number)
throws OutOfRangeNumberException {
assertEquals(word, service.convert(number));
}
@Test
public final void testZero()
throws OutOfRangeNumberException {
testNumber("zero", 0);
}
あなたはtestNumber
をインライン化することができます。今、それはあまり役に立たない。これをパラメータ化されたテストクラスにすることができます。
ExpectedExceptionは期待例外をテストするための好ましい方法です。 –
私は同意すると私はすでにエリックの答えをupvotedしました。 – javadeveloper
例外の構造をチェックする必要がある場合は、ExpectedExceptionが必要です。たとえば、CmisExceptionsには特定の障害理由が設定されていると想定されます。私はそれを確認するためのテストを書かなければなりませんでした、そして私はその目的のためにHamcrest matchersを使いました。例外が予想される場合は、@Testの引数を使用します。 –