原文: https://howtodoinjava.com/junit5/before-all-annotation-example/

JUnit5 @BeforeAll 注解替换了 JUnit4 中的@BeforeClass注解。 它用于表示应在当前测试类中的所有测试之前执行注解方法

@BeforeAll注解用法

使用@BeforeAll注解方法,如下所示:

  1. @BeforeAll
  2. public static void init(){
  3. System.out.println("BeforeAll init() method called");
  4. }

@BeforeAll注解的方法必须是静态方法,否则它将引发运行时错误。

  1. org.junit.platform.commons.JUnitException: @BeforeAll method 'public void com.howtodoinjava.junit5.examples.JUnit5AnnotationsExample.init()' must be static.
  2. at org.junit.jupiter.engine.descriptor.LifecycleMethodUtils.assertStatic(LifecycleMethodUtils.java:66)
  3. at org.junit.jupiter.engine.descriptor.LifecycleMethodUtils.lambda$findBeforeAllMethods$0(LifecycleMethodUtils.java:42)
  4. at java.util.ArrayList.forEach(ArrayList.java:1249)
  5. at java.util.Collections$UnmodifiableCollection.forEach(Collections.java:1080)
  6. at org.junit.jupiter.engine.descriptor.LifecycleMethodUtils.findBeforeAllMethods(LifecycleMethodUtils.java:42)

@BeforeAll注解示例

让我们举个例子。 我使用了一个Calculator类并添加了一个add方法。 我将使用@RepeatedTest注解对其进行 5 次测试。 此注解将导致add测试运行 5 次。 但是@BeforeAll带注解的方法只能调用一次。

  1. package com.howtodoinjava.junit5.examples;
  2. import org.junit.jupiter.api.Assertions;
  3. import org.junit.jupiter.api.BeforeAll;
  4. import org.junit.jupiter.api.DisplayName;
  5. import org.junit.jupiter.api.RepeatedTest;
  6. import org.junit.jupiter.api.RepetitionInfo;
  7. import org.junit.jupiter.api.Test;
  8. import org.junit.jupiter.api.TestInfo;
  9. import org.junit.platform.runner.JUnitPlatform;
  10. import org.junit.runner.RunWith;
  11. @RunWith(JUnitPlatform.class)
  12. public class BeforeAllTest {
  13. @DisplayName("Add operation test")
  14. @RepeatedTest(5)
  15. void addNumber(TestInfo testInfo, RepetitionInfo repetitionInfo) {
  16. System.out.println("Running test -> " + repetitionInfo.getCurrentRepetition());
  17. Assertions.assertEquals(2, Calculator.add(1, 1), "1 + 1 should equal 2");
  18. }
  19. @BeforeAll
  20. public static void init(){
  21. System.out.println("Before All init() method called");
  22. }
  23. }

其中Calculator类是:

  1. package com.howtodoinjava.junit5.examples;
  2. public class Calculator
  3. {
  4. public int add(int a, int b) {
  5. return a + b;
  6. }
  7. }

现在执行测试,您将看到以下控制台输出:

  1. Before All init() method called
  2. Running test -> 1
  3. Running test -> 2
  4. Running test -> 3
  5. Running test -> 4
  6. Running test -> 5

显然,带注解的@BeforeAll方法init()仅被调用一次。

学习愉快!

源码下载