3

我在我的应用程序中广泛使用 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 LoggerFactoryapi,很难模拟LOG对象。我真正想做的是有一个JUnit 和 Mockito 可以访问的不同的测试 slf4j 实现(我在生产中使用logback )。我怎样才能做到这一点?

我正在使用 JUnit 4.11、Mockito 1.9.5 和 Jukito 1.3。我不想使用PowerMock,因为它与 Jukito 不兼容。

4

0 回答 0