Java Junit5的TestReporter线程安全吗?

Java Junit5的TestReporter线程安全吗?,java,multithreading,unit-testing,junit5,Java,Multithreading,Unit Testing,Junit5,如果两个线程可能会同时修改TestReporter实例,下面的代码是否正常 @Test public void someTest(TestReporter testReporter) { // do some stuff CompletableFuture.allOf( CompletableFuture.runAsync(() -> { // do task A

如果两个线程可能会同时修改TestReporter实例,下面的代码是否正常

    @Test
    public void someTest(TestReporter testReporter) {
        // do some stuff
        CompletableFuture.allOf(
                CompletableFuture.runAsync(() -> {
                    // do task A
                    testReporter.publishEntry("taskA", "valueA");
                }),
                CompletableFuture.runAsync(() -> {
                    // do task B
                    testReporter.publishEntry("taskB", "valueB");
                })
        ).join();
    }
TLDR:是的

正确答案当然是:视情况而定

JUnit5的设计允许并行测试执行。 报告测试结果和发布报告条目的整个机制都是通过事件传播完成的,既不共享可变状态,也不同步基础ReportEntry的事件或实例。 假设没有棘手的bug testReporter.Publishinentry。。因此应该是线程安全的

但是,JUnit 5平台允许第三方连接到事件侦听中,例如,在测试开始、测试结束或测试发布一些附加数据时,生成自己的报告或执行其他操作。那些第三方TestExecutionListener实现可以做他们想做的事情,而且它们可能不是线程安全的

是的

正确答案当然是:视情况而定

JUnit5的设计允许并行测试执行。 报告测试结果和发布报告条目的整个机制都是通过事件传播完成的,既不共享可变状态,也不同步基础ReportEntry的事件或实例。 假设没有棘手的bug testReporter.Publishinentry。。因此应该是线程安全的

但是,JUnit 5平台允许第三方连接到事件侦听中,例如,在测试开始、测试结束或测试发布一些附加数据时,生成自己的报告或执行其他操作。那些第三方TestExecutionListener实现可以做他们想做的事情,而且它们可能不是线程安全的