在 Spring 引导中设置集成测试数据

Integration Test Data Set Up in Spring Boot

这是我的测试class

    @SpringBootTest
    @ActiveProfiles("test")
    public MyTest {

       ...

       @Before
       public void init() {
          System.out.println(":::: --- start init() ---");
          ...
        }
       ...
    }

很奇怪,init() 出于某种原因不会 运行。如果我将 @Before 更改为 @BeforeAll 并将方法更改为静态,则 init() 将 运行。一个问题是那些数据设置代码没有在静态方法中 运行 并且我无法将它们全部更改为静态块中的 运行 。现在,我在每个测试方法中都有以下代码来解决这个问题

    if(list.size() == 0)
       init();

我想知道为什么 @Before 不会 运行。有什么建议吗?

在 JUnit 5 中,@BeforeEach@BeforeAll 注释等同于 JUnit 4 中的 @Before@BeforeClass

@Before 是 JUnit 4 注释,而 @BeforeAll 是 JUnit 5 注释。您还可以从导入 org.junit.Beforeorg.junit.jupiter.api.BeforeAll.

中看到这一点

此外,标记为 @BeforeEach 的代码在每次测试之前执行,而 @BeforeAll 运行 在整个测试夹具之前执行一次。

为了能够 运行 @BeforeAll 在 non-static 方法上,您可以更改测试实例的生命周期:

@TestInstance(TestInstance.Lifecycle.PER_CLASS)

不过你必须小心,因为测试 class 实例现在只创建一次,而不是每个测试方法一次。如果您的测试方法依赖于存储在实例变量中的状态,您现在可能需要在 @BeforeEach@AfterEach 生命周期方法中手动重置状态。