我有这个单元测试,整个测试因为抛出的异常而失败,尽管它是expected
:
@Test(expected = AutoGenerateStringIdException.class)
public void testPut_shouldThrowException(){
RootEntity rootObject = new RootEntity();
// Some codes here
try {
Key key = store.put(rootObject);
} catch(AutoGenerateStringIdException e){
assertEquals(e.getMessage(), "Cannot auto-generate String @Id");
}
}
答案 0 :(得分:3)
您可以拥有@Test(expected = SomeException.class)
或使用try...catch
。你不能同时使用它们。
当您声明测试以期望抛出某个异常并且如果您在测试中捕获它时,它将不会被抛出,是吗?
虽然我没有尝试过,但您可以尝试从catch块重新抛出异常。
catch(AutoGenerateStringIdException e){
assertEquals(e.getMessage(), "Cannot auto-generate String @Id");
throw e;
}
答案 1 :(得分:0)
如果测试中出现异常,则不应该捕获它。只需删除try / catch并观察,会发生什么。
答案 2 :(得分:0)
请查看JUnit wiki:https://github.com/junit-team/junit/wiki/Exception-testing它列出了一些测试异常的不同方法。