我想单元测试在我的代码中生成的日志语句。我正在使用slfj,log4j和Mockito。我现在用的是类似的代码如下从博客在 http://bloodredsun.com/2010/12/09/checking-logging-in-unit-tests/运行单元测试时未调用Mockito模拟log4j appender
当我运行它抛出异常的测试说,有0调用在行:
verify(mockAppender).doAppend(captorLoggingEvent.capture());
错误消息:
通缉但未调用:mockAppender.doAppend(); - > at testClass.testLogAdviceAfterReturning(DpsOpsLoggerTest2.java:94)实际上,这个模拟与零交互。
我看到控制台上打印的日志。请求您提供帮助。
@RunWith(MockitoJUnitRunner.class)
public class ExampleThatLogsTest {
@Mock
private Appender mockAppender;
@Captor
private ArgumentCaptor captorLoggingEvent;
@Before
public void setup() {
LogManager.getRootLogger().addAppender(mockAppender);
}
@After
public void teardown() {
LogManager.getRootLogger().removeAppender(mockAppender);
}
@Test
public void shouldConcatAndLog() {
//given
ExampleThatLogs example = new ExampleThatLogs();
//when
String result = example.concat("foo", "bar");
//then
assertEquals("foobar", result);
verify(mockAppender).doAppend(captorLoggingEvent.capture());
LoggingEvent loggingEvent = captorLoggingEvent.getValue();
//Check log level
assertThat(loggingEvent.getLevel(), is(Level.INFO));
//Check the message being logged
assertThat(loggingEvent.getRenderedMessage(),
is("String a:foo, String b:bar"));
}
}
可以ü请给出错误日志 –
@AbdulManaf:我已更新错误消息。 –
@JohnLiva:你能告诉我们什么是ExampleThatLogs吗?它如何初始化其Logger? – TobiSH