如何验证是否捕获到异常

时间:2016-07-20 13:13:20

标签: java junit mockito

如何测试Mockito是否发现异常?

示例:

try{
     int a = 8/0;
catch(ArithmeticException e){
    Logger.error(e.getMessage());
}

1 个答案:

答案 0 :(得分:3)

我猜你的问题是Logger.error()实际上是对静态方法的调用。并且"正常" Mokito不允许您模拟对静态方法的调用。

因此,有两种选择:

a)你可以转向PowerMokito ...这可以让你模拟这样的电话;因此你可以简单地指定:"我希望用这种异常对象"来调用Logger.error()。但要注意:PowerMockito及其兄弟PowerMock需要付出一定代价;对于许多人来说,他们创造的问题比他们解决的问所以,就个人而言,我绝对不推荐这个选项。

b)你可以退一步,改变你的设计,不要使用静态方法,如:

class UnderTest {
   SomeLogger logger ... coming into the class via dependency injection

   void foo() {
      try { ... whatever  
      } catch(WhateverException w) {
        logger.error(w....

所以,现在你正在处理一个方法调用;你可以创建一个模拟并传递它。

但是,当然,只有拥有日志记录代码才有效。当然,这可能需要做很多工作。但从长远来看,它会得到回报。

最后建议:您可能希望观看那些videos,详细解释"编写可测试代码"实际上是关于。