我正在尝试对代码中生成的日志语句进行单元测试。我使用slfj、log4j和Mockito。我正在使用类似的代码如下从博客在http://bloodredsun.com/2010/12/09/checking-logging-in-unit-tests/
当我运行测试时,它抛出异常,说在第行有0个调用:
第一个月
错误信息:
被通缉但未被援引:mockAppender.doAppend();-> at testClass.testLogAdviceAfterReturning(DpsOpsLoggerTest2.java:94)实际上,与此mock的交互为零。
我看到控制台上打印的日志。恳请您的帮助。
@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"));
}
}
字符串
3条答案
按热度按时间izkcnapc1#
我试着模仿你的情况,在我的结束它是工作的罚款
//日志工具
字符串
//class
型
//单元测试
型
oprakyz72#
我知道这有点过时,但我也在努力。我在被测类的DEBUG级别记录语句。我在logback.xml中为被测类设置的配置被设置为INFO。将我的日志语句更改为INFO允许测试通过。此外,我还阅读了this Github的帖子,它非常简洁,是一个测试日志输出的干净实现。希望其他人会发现它有用。
ni65a41a3#
使用This verify(mockAppender,atLeastOnce()).doAppend(captorLoggingEvent.capture());在verify方法中的第二个参数告诉你要模拟多少次,所以在你的情况下它是零你也可以参考这个:-https:www.baeldung.com/mockito-verify