如何仅在JUnit测试方法失败时使用SLF4J记录Java中的语句?
考虑JUnit类中的JUnit方法。它有一些测试和一些logger.info/debug语句或其他内容。也许您不需要登录Junit方法,但我需要登录,这为快速了解某些测试失败的原因省去了很多麻烦 如果方法到达末尾,我想“擦除”这些日志语句,可能是使用SLF4J 实现这一点的一个简单方法是如何仅在JUnit测试方法失败时使用SLF4J记录Java中的语句?,java,logging,junit,Java,Logging,Junit,考虑JUnit类中的JUnit方法。它有一些测试和一些logger.info/debug语句或其他内容。也许您不需要登录Junit方法,但我需要登录,这为快速了解某些测试失败的原因省去了很多麻烦 如果方法到达末尾,我想“擦除”这些日志语句,可能是使用SLF4J 实现这一点的一个简单方法是 logger.tick(); 告诉记录器标记更多日志语句 logger.tack(); 删除所有日志语句,直到勾号标志。问题是您无法在Eclipse控制台上擦除内容;) 这将使我的生活更加快乐,因为我现在使
logger.tick();
告诉记录器标记更多日志语句
logger.tack();
删除所有日志语句,直到勾号标志。问题是您无法在Eclipse控制台上擦除内容;)
这将使我的生活更加快乐,因为我现在使用的是持续的JUnit测试。我不会自觉地记录单元测试内部的日志,但我想大多数人已经可以使用内置在单元测试框架中的日志功能了。但是,如果您想要实现这一点,则需要在变量中捕获日志(有些可能建议使用
StringBuilder
),然后在测试结束时根据某个死囚开关转储日志(因此,如果开关未命中,则单元测试的最后一步是转储保留的日志)
示例可能如下所示:
public abstract class LoggedTest extends TestCase {
protected boolean displayLog;
protected StringBuilder log;
public void tick() {
displayLog = true;
}
public void tack() {
displayLog = false;
}
public void log(String msg) {
log.append(message);
}
protected void setUp() {
displayLog = false;
log = new StringBuilder();
}
protected void tearDown() {
if(displayLog) {
System.err.println(log);
}
}
}
为了补充Jason的想法,您应该改用StringBuilder(),因为您可能会看到您的单元测试并不是因为代码而受到影响,而是因为StringBuffer的性能。很好的编辑@r0estir0bbe:)两年前我写的代码质量太差,我对此感到惊讶。希望我已经好起来了。