当前位置: 首页 > 知识库问答 >
问题:

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

鲁博雅
2023-03-14

我在JUnit测试类中使用Javautil日志(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>

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

共有1个答案

阴英武
2023-03-14

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

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

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

 类似资料:
  • 我一直在设置一些合约JUnit 4测试(遵循回答这个问题的建议) - 例如,如果我有一个接口(我已经在示例中包含了泛型,因为我在我的项目中使用它们) - 但是,这是一个大大简化的示例: 我可以创建一个抽象的合同测试,例如: ...并为每个实现扩展此抽象测试类(我使用。我还将一些变量传递给抽象测试类,以测试接口的实现。 然而,实际上,一些接口返回的对象是其他接口的实现,我希望能够使用该接口的抽象契约

  • 问题内容: 我有一组JUnit测试用例,并使用junit任务从ANT执行它们。在执行测试时,在控制台中,我只能看到当前正在运行哪个测试用例(即Java类),而不能看到测试方法。有什么方法可以打印当前正在执行的测试方法?还是除了拥有自己的JUnit测试运行器之外,还有其他方法可以做到这一点? 控制台输出样例 相反,我希望得到这样的输出 问题答案: 不幸的是,没有很好的方法挂接到JUnit。对于使用T

  • 有没有更简单的方法来完成我想要的?如果这是最好的方法,那么我做错了什么?

  • 我想在JUnit中创建用于测试运行的自定义html报告。我有一个问题是释放资源和关闭标记后,所有的测试都完成了。 我保留了一个打开的文件,以便编写报告。因为每个测试都应该是表和行,而且有数百个,所以我不想为每个测试打开和关闭通道。这里出现的问题是测试组织--我有嵌套的套件,所以testRunFinished不是一个选项(指单个套件,不是所有测试,我看到了这个问题)。TestWatcher也不会帮助

  • 方法和测试位于一个类中,例如 下面是我的testng.xml的示例,其中包含了包含功能测试的包 UPD.post修改后的代码中包含AfterTest。我只使用before/aftermethod注释

  • 我们正在使用REST保证来测试一些REST服务。我们需要将请求和响应日志重定向到Log4j日志。我们有以下代码来测试日志重定向: 我们将以下日志输出到log4j文件: 在system.out,我们看到请求和响应的REST保证输出。该输出没有重定向到Log4j文件。如何将控制台输出重定向到Log4j文件?