问题
我在junit测试中使用mockito。你如何发生异常然后断言它有(通用伪代码)
#1 热门回答(143 赞)
首先回答你的第二个问题。如果你使用的是JUnit 4,则可以使用。注释你的测试
@Test(expected=MyException.class)
断言发生了异常。并使用mockito"模拟"异常
when(myMock.doSomething()).thenThrow(new MyException());
#2 热门回答(60 赞)
#BDD风格解决方案
Mockitoalone不是处理异常的最佳解决方案,useMockitowithCatch-Exception
#Mockito Catch-Exception AssertJ
given(otherServiceMock.bar()).willThrow(new MyException());
when(myService).foo();
then(caughtException()).isInstanceOf(MyException.class);
##示例代码
Mockito Catch-Exception Assertj完整样本
##依赖关系
eu.codearte.catch-exception:catch-exception:1.3.3
org.assertj:assertj-core:1.7.0
坏处
仅支持最高1.10.8的Mockito
#3 热门回答(13 赞)
使异常发生如下:
when(obj.someMethod()).thenThrow(new AnException());
通过声明你的测试将抛出此类异常来验证它是否已发生:
@Test(expected = AnException.class)
或者通过正常的模拟验证:
verify(obj).someMethod();
如果你的测试旨在证明中间代码处理异常(即不会从你的测试方法抛出异常),则需要后一个选项。