Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何仅在JUnit测试方法失败时使用SLF4J记录Java中的语句?_Java_Logging_Junit - Fatal编程技术网

如何仅在JUnit测试方法失败时使用SLF4J记录Java中的语句?

如何仅在JUnit测试方法失败时使用SLF4J记录Java中的语句?,java,logging,junit,Java,Logging,Junit,考虑JUnit类中的JUnit方法。它有一些测试和一些logger.info/debug语句或其他内容。也许您不需要登录Junit方法,但我需要登录,这为快速了解某些测试失败的原因省去了很多麻烦 如果方法到达末尾,我想“擦除”这些日志语句,可能是使用SLF4J 实现这一点的一个简单方法是 logger.tick(); 告诉记录器标记更多日志语句 logger.tack(); 删除所有日志语句,直到勾号标志。问题是您无法在Eclipse控制台上擦除内容;) 这将使我的生活更加快乐,因为我现在使

考虑JUnit类中的JUnit方法。它有一些测试和一些logger.info/debug语句或其他内容。也许您不需要登录Junit方法,但我需要登录,这为快速了解某些测试失败的原因省去了很多麻烦

如果方法到达末尾,我想“擦除”这些日志语句,可能是使用SLF4J

实现这一点的一个简单方法是

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:)两年前我写的代码质量太差,我对此感到惊讶。希望我已经好起来了。