【问题标题】:Is Junit5's TestReporter thread-safe?Junit5 的 TestReporter 线程安全吗?
【发布时间】:2020-06-18 15:43:31
【问题描述】:

如果两个线程最终可能同时修改 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();
    }

【问题讨论】:

    标签: java multithreading unit-testing junit5


    【解决方案1】:

    TLDR:是的

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

    JUnit 5 旨在允许并行测试执行。 报告测试结果(以及发布报告条目)的整个机制是通过事件传播完成的,既不共享可变状态,也不同步底层ReportEntry 的事件或实例。 鉴于没有棘手的错误testReporter.publishEntry(..) 因此应该是线程安全的。

    这里是“但是”:JUnit 5 平台允许第 3 方挂钩到事件侦听,例如在测试开始、测试结束或测试发布一些额外数据时生成自己的报告或做其他事情。那些第 3 方 TestExecutionListener 实现可以做他们想做的事,他们可能不是是线程安全的。

    【讨论】:

      猜你喜欢
      • 2020-04-15
      • 2018-07-18
      • 2011-07-04
      • 2014-04-26
      • 2012-11-30
      • 2010-12-30
      • 2013-03-12
      • 2021-08-03
      • 2010-12-27
      相关资源
      最近更新 更多