jav*_*999 3 java logging junit unit-testing logback
下面是我尝试为其编写Junit测试的方法:
我想测试的方法:
//logger declared outside of method in Class
private static Logger LOGGER = LoggerFactory.getLogger(PersonService.class);
public void showOutputOfIdentifications(int age) {
if(age>25){
LOGGER.info("Over 25");
}else{
LOGGER.info("25 or Under");
}
}
Run Code Online (Sandbox Code Playgroud)
如何测试以验证是否Logback
已调用正确的Log语句?
在我的测试中,我尝试模拟logger
并验证它是否被调用,但是这没有用?
当前的测试尝试:
@Test
public void testShowOutputOfIdentifications() throws ParseException{
int age = 10;
Logger LOGGER_mock = mock(Logger.class);
//call method under test
showOutputOfIdentifications(age);
verify(LOGGER_mock).info("25 or under");
}
Run Code Online (Sandbox Code Playgroud)
当前失败的测试输出:
Wanted but not invoked:
logger.info(
"25 or under "
);
Actually, there were zero interactions with this mock.
Run Code Online (Sandbox Code Playgroud)
小智 8
您可以添加自己的追加程序,并断言日志消息是以这种方式编写的,请参阅以编程方式配置LogBack追加程序。
像这样:
// create the mock appender
Appender mockedAppender = Mockito.mock(Appender.class);
// inject it
((ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME)).addAppender(mockedAppender);
// run your test
LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME).error("Test msg");
// verify using ArgumentCaptor
ArgumentCaptor<Appender> argumentCaptor = ArgumentCaptor.forClass(Appender.class);
Mockito.verify(mockedAppender).doAppend(argumentCaptor.capture());
// assert against argumentCaptor.getAllValues()
Assert.assertEquals(1, argumentCaptor.getAllValues().size());
Assert.assertEquals("Test msg", ((LoggingEvent)argumentCaptor.getAllValues().get(0)).getMessage());
// remove the mock appender from static context
((Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME)).detachAppender(mockedAppender);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7394 次 |
最近记录: |