有点转发,但是关于没有足够声誉的第 22 条军规意味着我无法对任何重复的线程发表评论! (咳嗽)
我正在尝试使用 Mockito 测试 try-catch 的 catch 块;是否可以使模拟抛出由正在测试的方法处理的异常?我无法使用 doThrow()...when()... 或 @Test(expected = Foo.class) 因为异常已处理。我想测试该方法是否正确处理异常。
@Controller
public class StockExchangeController {
public ModelAndView placeOrder(ModelAndView mav, MyObj myObj) {
try {
validator.validate(myObj); // Throws CustomException if validation fails
mav.setViewName("successPage");
} catch (CustomException ex) {
mav.setViewName("failPage");
}
return mav;
}
}
我希望能够存根我的“validatorObject”的行为,例如
doThrow(new CustomException()).when(validatorMock).validate();
有没有办法做到这一点?
答案这里(使用 Junit 和 mockito 测试 catch 块逻辑) https://stackoverflow.com/questions/44569595/test-catch-block-logic-with-junit-and-mockito不起作用(我相信),因为异常在达到测试级别之前已被处理。
非常感谢提示和想法!
BDD http://guide.agilealliance.org/guide/gwt.html风格解决方案
Mockito单独使用并不是处理异常的最佳解决方案,请使用Mockito with 捕获异常
Mockito +
Catch-Exception https://github.com/Codearte/catch-exception +
AssertJ https://github.com/joel-costigliola/assertj-core
given(otherServiceMock.bar()).willThrow(new MyException());
when(myService).foo();
then(caughtException()).isInstanceOf(MyException.class);
Sample code
- Mockito + Catch-Exception + Assertj 完整示例 https://gist.github.com/mariuszs/7489190
Dependencies
- eu.codearte.catch-异常:catch-异常:1.3.3
- org.assertj:assertj-core:1.7.0
Disadvantage
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)