执行所有测试后打印Junit测试方法中的日志

执行所有测试后打印Junit测试方法中的日志,junit,java.util.logging,Junit,Java.util.logging,我在Junit测试类中使用Java util logging JUL,JUL在默认配置下工作,即打印到控制台 使用@BeforeClass和@AfterClass注释的方法中的日志语句在执行时将被打印,但只有在所有测试执行完成后,“@Test”方法中的日志才会被打印 我不确定到底是什么地方出了问题,因为之前的情况也是如此 记录器实例化: private static Logger logger = Logger.getLogger(MainIntegrationTest.class.getNam

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

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

我不确定到底是什么地方出了问题,因为之前的情况也是如此

记录器实例化:

private static Logger logger = Logger.getLogger(MainIntegrationTest.class.getName());
记录器用途:

logger.info("start test");
测试用例使用maven运行。我注意到,只有在我开始使用这个surefire配置并行运行测试类之后,这种情况才会发生:

<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>
如果我以串行方式运行测试类,那么日志将在测试执行时打印

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

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


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

如果您的测试记录了一些东西,那么调用Assert.fail是否会记录该消息?实际上,只有在所有测试完成后,才会打印来自测试方法的日志。我已经编辑了这个问题以提供更多的信息。相关:我也这么认为,但它在什么地方被记录了吗?@Akhillaina如果是的话,它会在JUnit文档中。否则,您只需检查JUnit的源代码。删除并行选项对我来说很有效。