【问题标题】:How to see test-by-test stdout/stderr in Maven surefire如何在 Maven surefire 中查看逐个测试的标准输出/标准错误
【发布时间】:2015-04-10 18:35:00
【问题描述】:

我在 Maven 中运行了一个基于 JUnit 的测试套件,总共进行了大约 200 个测试。许多会产生 Log4J DEBUG 或 ERROR 行,我看到它们都被混合到我的surefire-reports 目录中的一个长文件中。

我想查看所有这些输出除以测试,这样我就可以发现什么测试产生了什么输出。我该怎么做?

【问题讨论】:

  • 我刚才作为重复引用的问题解释了如何使用RunListeners 来做你想做的事。
  • 这确实是我想要的,但似乎它应该可以在没有任何自定义编码的情况下实现?我们使用 Teamcity 作为 CI 服务器,当测试失败时,我可以单击一个测试并仅查看该测试的输出。在命令行上运行 Maven 时,我也想要等效的。有没有实现这一点的万无一失的配置?
  • 我不认为surefire有办法做到这一点而不写一点代码。 RunListener 可以很简单,应该不到十几行代码,如果加上maven配置修改的话,大概30行左右。

标签: java maven junit


【解决方案1】:

最直接的解决方案是在每个测试的开始和结束时调用以下方法:

static void printBeginning(PrintStream stream) {
  String methodName = Thread.currentThread().getStackTrace()[0].getMethodName();
  stream.format("---- Beginning Test: %s ----%n", methodName);
}

但是,如果您想使用 surefire,则可以编写自己的自定义 RunListener

基本上,在 Maven 中分配 RunListener,如this documentation

<plugins>
[...]
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.18.1</version>
    <configuration>
      <properties>
        <property>
          <name>listener</name>
          <value>com.mycompany.MyResultListener,com.mycompany.MyResultListener2</value>
        </property>
    </configuration>
  </plugin>
[...]
</plugins>

然后代码将由 Surefire 运行。

您可以在此处阅读有关如何执行此操作的更多信息:Using JUnit RunListener with Maven

【讨论】:

  • 明确地说,这实际上是 Log4J 调试语句,我打开它是为了帮助更好地诊断测试失败时失败的原因。另外,我正在寻找某种万无一失的配置来执行此操作-我已经知道在 JUnit 中实现此目的的各种方法,包括您建议的蛮力方法。
  • 它与手头的问题并不真正相关,但我按要求对其进行了编辑,以便我们可以专注于实际问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-17
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多