一个意外的例外是测试失败,所以你不需要也不想抓住一个。
@Test
public void canConvertStringsToDecimals() {
String str = "1.234";
Assert.assertEquals(1.234, service.convert(str), 1.0e-4);
}
直到服务不会抛出IllegalArgumentException,因为str中有一个小数点,这将是一个简单的测试失败。
预期的异常应由@Test的可选预期参数处理。
@Test(expected=NullPointerException.class)
public void cannotConvertNulls() {
service.convert(null);
}
如果程序员懒惰并且抛出异常,或者如果他的服务返回0.0,测试将失败。只有NPE才能成功。请注意,预期异常的子类也可以工作。这对于NPE来说很少见,但与IOExceptions和SQLExceptions相似。
在您想要测试特定异常消息的罕见情况下,可以使用较新的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);
}
现在,除非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;现在,这并没有什么帮助。您可以将其转换为参数化测试类。