2011-12-20 48 views
13

我可以测试一个特定的异常是否抛出而不是如何测试特定异常是否不被抛出?

相反,使用@Test[expect=MyException]可以很容易。

但是我怎么能否定这个呢?

+0

这将考验,即抛出异常。如果不抛出异常,它将失败。所以它已经做了你想要的(?) – oers 2011-12-20 12:52:00

+0

请澄清你的问题 – nowaq 2011-12-20 12:52:34

+1

你的标题(编辑前后)与你的问题的文本相矛盾。你想要做什么? – 2011-12-20 12:56:33

回答

17

如果你想测试一个特定的例外是其他异常可能会被抛出的条件抛出,试试这个:

try { 
    myMethod(); 
} 
catch (ExceptionNotToThrow entt){ 
    fail("WHOOPS! Threw ExceptionNotToThrow" + entt.toString); 
} 
catch (Throwable t){ 
    //do nothing since other exceptions are OK 
} 
assertTrue(somethingElse); 
//done! 
0

您可以执行以下操作使用assertj

如果要检查,如果没有抛出的异常则

Throwable throwable = catchThrowable(() -> sut.method()); 

assertThat(throwable).isNull(); 

,或者您希望抛出

Throwable throwable = catchThrowable(() -> sut.method()); 

assertThat(throwable).isInstanceOf(ClassOfExecption.class) 
        .hasMessageContaining("expected message");