您将如何实现,以便每个Test类将输出记录到单独的文件中?

时间:2014-08-05 21:18:46

标签: unit-testing testing logging testng junit4

使用Java,使用TestNG或JUnit,如果您想将测试期间收集的一些信息记录到文件中,并让每个测试类(例如 TestClass1.class )保持单独的输出像这样以类命名的文件:

TestClass1.log

你会如何实现这种事情?我知道log4j可以在单个文件的“每行”输出中记录类名,但我希望每个类的输出都在单独的文件中。此外,log4j可以根据包名称将输出记录到不同的文件。这些解决方案都不是我想要的,因为我想要数百个测试来创建数百个日志文件

1 个答案:

答案 0 :(得分:0)

使用Log4J 1.x,您必须手动实例化每个类中的Logger,使用套件名称和类名称的组合为每个测试提供唯一的文件名(假设每个套件都有唯一的名称)。 / p>

例如,在测试类的setUp()方法中,定义日志文件的名称:

String logFilename = context.getSuite().getName() + "_" + this.getClass().getSimpleName();

然后在测试使用的每个类中,手动实例化记录器并提供要使用的日志文件的名称:

public class SomeClass {
  private Logger log = null;

  public SomeClass(String logFilename) {
    log = Logger.getLogger(logFilename);
  }

但是这个解决方案并不是很优雅,它需要将文件名传递给测试中使用的所有类。

更好的解决方案:

如果您可以升级到Log4J 2,它支持使用ThreadContext写入单独的日志文件: http://logging.apache.org/log4j/2.x/faq.html#separate_log_files

我还发现这篇博文建议使用LOGBack及其映射诊断上下文:http://www.nullin.com/2010/07/28/logging-tests-to-separate-files/