更新: JUnit5对异常测试进行了改进:assertThrows
。
以下示例来自:Junit 5用户指南
@Test
void exceptionTesting() {
Throwable exception = assertThrows(IllegalArgumentException.class, () ->
{
throw new IllegalArgumentException("a message");
});
assertEquals("a message", exception.getMessage());
}
使用JUnit 4的原始答案。
有几种方法可以测试是否引发了异常。我的文章中还讨论了以下选项:如何使用JUnit编写出色的单元测试
设置expected
参数@Test(expected = FileNotFoundException.class)
。
@Test(expected = FileNotFoundException.class)
public void testReadFile() {
myClass.readFile("test.txt");
}
使用 try
catch
public void testReadFile() {
try {
myClass.readFile("test.txt");
fail("Expected a FileNotFoundException to be thrown");
} catch (FileNotFoundException e) {
assertThat(e.getMessage(), is("The file test.txt does not exist!"));
}
}
使用ExpectedException
规则进行测试。
@Rule
public ExpectedException thrown = ExpectedException.none();
@Test
public void testReadFile() throws FileNotFoundException {
thrown.expect(FileNotFoundException.class);
thrown.expectMessage(startsWith("The file test.txt"));
myClass.readFile("test.txt");
}
您可以在JUnit4 Wiki中了解有关异常测试和bad.robot-预期异常JUnit规则的更多信息。
org.mockito.Mockito.verify
使用各种参数进行调用,以确保在引发异常之前发生了某些事情(例如,使用正确的参数调用了logger服务)。