我有一个抛出异常的方法。我有这样的测试。
@Rule
public ExpectedException expectedEx = ExpectedException.none();
@Test
public void shouldThrowExceptionIfValidationFails() throws Exception {
doThrow(new InvalidException("Invalid Token")).when(obj).foo(any());
expectedEx.expect(InvalidException.class);
expectedEx.expectMessage("Invalid Token");
// my method call
// verify DB save doesn't happens
assertTrue(false);
}
测试断言异常,并且由于抛出异常,测试通过。它不关心最后一行assertTrue(false)
我如何确保我的其他断言也得到满足。
答案 0 :(得分:1)
这是我为此案例所遵循的模式。它按设计使用ExpectedException
。我喜欢throw e
而不是try
中方法方法调用失败,因为如果有人决定删除fail
(人们倾向于{}},那么它不会导致误报当他们看到fail()
或者测试因为遇到fail()
而失败时执行。
@Test
public void shouldThrowExceptionIfValidationFails() throws Exception {
doThrow(new InvalidException("Invalid Token")).when(obj).foo(any());
expectedEx.expect(InvalidException.class);
expectedEx.expectMessage("Invalid Token");
try{
// my method call
}catch(InvalidException e){
// verify DB save doesn't happens
assertTrue(false);
throw e;
}
}