予期しない例外はテストの失敗であるため、キャッチする必要も、キャッチする必要もありません。
@Test
public void canConvertStringsToDecimals() {
String str = "1.234";
Assert.assertEquals(1.234, service.convert(str), 1.0e-4);
}
小数点が含まれているため、 untilserviceはスローされません。これは、単純なテストの失敗になります。IllegalArgumentExceptionstr
予想される例外は、 のオプションのexpected引数によって処理する必要があり@Testます。
@Test(expected=NullPointerException.class)
public void cannotConvertNulls() {
service.convert(null);
}
プログラマーが怠け者で を投げたException場合、または をservice返し0.0た場合、テストは失敗します。だけNPEが成功します。予想される例外のサブクラスも機能することに注意してください。これは s ではまれですが、 s とsNPEでは一般的です。IOExceptionSQLException
特定の例外メッセージをテストしたいというまれなケースでは、新しいExpectedExceptionJUnitを使用します@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);
}
setTemperature が をスローし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。今ではあまり役に立ちません。これをパラメータ化されたテスト クラスに変換できます。