4

我需要记录每个测试用例的执行时间。我不想使用自定义实现。我想知道 junit5 Btw 中是否有可用的注释

,我知道Stopwatch或 Junit4 @Timeout

4

4 回答 4

6

在查看了 junit5 文档后,我发现了这个示例 TimeExtension

这个片段来自他们的文档:

@ExtendWith(TimingExtension.class)
class TimingExtensionTests {

  @Test
  void sleep20ms() throws Exception {
     Thread.sleep(20);
  }

  @Test
  void sleep50ms() throws Exception {
    Thread.sleep(50);
  }

}

编辑:TimingExtension 的源代码

于 2017-07-21T05:17:26.913 回答
2

我写了一个BenchmarkExtension你可以申请的@Benchmark。您可以按如下方式使用它:

@Benchmark
class BenchmarkTest {

    @Test
    void notBenchmarked() {
        assertTrue(true);
    }

    @Test
    @Benchmark
    void benchmarked() throws InterruptedException {
        Thread.sleep(100);
        assertTrue(true);
    }

}

当应用于该类时,您将收到一条消息,其中包含该类中所有测试方法的总运行时间。当应用于单个测试方法时,您将仅收到该测试的消息。

我希望它最终会进入JUnit Pioneer

于 2017-07-21T05:39:50.343 回答
0

Junit5 还有一个@Timout注解。

还有一个assertTimeoutassertTimeoutPreemptively(参见文档)。

最后,JUnit 4 秒表功能在 JUnit 5 中不可用。TimeExtension如前所述使用。然而,这个扩展不是(还?)分布的一部分(见issue 343)。

于 2020-06-04T15:36:32.563 回答
0

如果您使用的是 Sonarqube,您可以找到每个测试的持续时间以及按时间排序的所有测试的总和

测试时间排序

所有测试

于 2021-05-05T13:49:06.740 回答