我为logback做了以下工作。
我创建了一个TestAppender类:
public class TestAppender extends AppenderBase<ILoggingEvent> {
private Stack<ILoggingEvent> events = new Stack<ILoggingEvent>();
@Override
protected void append(ILoggingEvent event) {
events.add(event);
}
public void clear() {
events.clear();
}
public ILoggingEvent getLastEvent() {
return events.pop();
}
}
然后,在我的 TestNG 单元测试类的父类中,我创建了一个方法:
protected TestAppender testAppender;
@BeforeClass
public void setupLogsForTesting() {
Logger root = (Logger)LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
testAppender = (TestAppender)root.getAppender("TEST");
if (testAppender != null) {
testAppender.clear();
}
}
我有一个在src/test/resources中定义的logback-test.xml文件,并且我添加了一个测试appender:
<appender name="TEST" class="com.intuit.icn.TestAppender">
<encoder>
<pattern>%m%n</pattern>
</encoder>
</appender>
并将此 appender 添加到根 appender:
<root>
<level value="error" />
<appender-ref ref="STDOUT" />
<appender-ref ref="TEST" />
</root>
现在,通过继承我的父测试类,我可以获取附加程序并获取最后记录的消息,并验证消息、级别和可抛出项。
ILoggingEvent lastEvent = testAppender.getLastEvent();
assertEquals(lastEvent.getMessage(), "...");
assertEquals(lastEvent.getLevel(), Level.WARN);
assertEquals(lastEvent.getThrowableProxy().getMessage(), "...");
Wanted but not invoked: appender.append(<Capturing argument>);
即使log.info
方法确实被调用了。 - AdrienWappender.append
没有被调用,我无法捕获参数。没有verify
行它可以运行,但是它什么也不做... 无论如何,感谢您花时间在三年后回复!如果我找到一个好的解决方案,我会在这里评论或回答 - AdrienW