【问题标题】:Logs in Junit test methods printed after all tests are executed [duplicate]执行所有测试后打印的Junit测试方法中的日志[重复]
【发布时间】:2017-07-05 14:08:16
【问题描述】:

我在 Junit 测试类中使用 Java util logging (JUL),而 JUL 在默认配置中工作(即打印到控制台)。

使用@BeforeClass@AfterClass 注释的方法的日志语句在执行时会打印出来,但“@Test”方法中的日志只有在所有测试执行完成后才会打印。

不确定到底是什么问题,因为之前也是如此。

记录器实例化:

private static Logger logger = Logger.getLogger(MainIntegrationTest.class.getName());

记录器使用:

logger.info("start test");

测试用例使用 maven 运行。我注意到只有在我开始使用这个万无一失的配置并行运行测试类之后才开始发生这种情况:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.20</version>
    <configuration>
        <parallel>classes</parallel>
        <useUnlimitedThreads>true</useUnlimitedThreads>
    </configuration>
</plugin>

如果我以串行方式运行测试类,则会在测试执行时打印日志。

【问题讨论】:

标签: junit java.util.logging


【解决方案1】:

测试用例使用 maven 运行。我注意到只有在我开始使用这个万无一失的配置并行运行测试类之后才开始发生这种情况

如果所有测试同时写入控制台,输出将变得混乱。对于并发执行,必须为整个运行缓冲结果,然后将其作为一个块写入控制台。写入控制台的唯一安全时间是测试完成时。

即使缓冲是逐行执行的,这也可能导致控制台中的交错消息,这可能难以阅读甚至误导您,因为您不知道该行的来源。

【讨论】:

  • 即使我也这么认为,但它是否记录在某个地方?
  • @AkhilRaina 如果是,它将在 JUnit 文档中。否则你只需要检查 JUnit 的源代码。
  • 删除parallel 选项对我有用。
猜你喜欢
  • 2016-10-31
  • 2015-11-21
  • 1970-01-01
  • 2014-03-13
  • 1970-01-01
  • 2016-12-16
  • 1970-01-01
  • 2020-10-10
  • 1970-01-01
相关资源
最近更新 更多