如何使JUnit捕获日志并失败

时间:2015-02-13 16:58:10

标签: java junit mockito slf4j jukito

我在我的应用程序中广泛使用slf4j。出于稳定性原因,有些情况下我的代码会优雅地处理错误情况,只需将其记录为错误并继续。

但是,我想编写测试来证明,对于给定的输入,我的SUT不会生成任何此类错误日志。

例如,我的代码通常如下所示:

public class MyClass {
  private static final Logger LOG = LoggerFactory.getLogger(MyClass.class);

  // snip

  public void someMethod(DTO input) {
    try {
      // snip
    } catch (SomeException e) {
      LOG.error("Code failed here!", e);
      // recover gracefully
    }
  }
}

我希望,在我的测试用例中,可以捕获类似

的内容
Mockito.verify(LOG.error(Mockito.anyString(), Mockito.any(SomeException.class), times(0));

但是,由于我生成LOG对象的方式 - 使用slf4j LoggerFactory api,很难模拟LOG对象。我真正想做的是在JUnit和Mockito可以访问的不同的测试slf4j实现(我在生产中使用logback)。我怎么能这样做?

我使用的是JUnit 4.11,Mockito 1.9.5和Jukito 1.3。我不想使用PowerMock as it's incompatible with Jukito.

0 个答案:

没有答案