我在我的应用程序中广泛使用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.