在 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.Before
和 org.junit.jupiter.api.BeforeAll
.
中看到这一点
此外,标记为 @BeforeEach
的代码在每次测试之前执行,而 @BeforeAll
运行 在整个测试夹具之前执行一次。
为了能够 运行 @BeforeAll
在 non-static 方法上,您可以更改测试实例的生命周期:
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
不过你必须小心,因为测试 class 实例现在只创建一次,而不是每个测试方法一次。如果您的测试方法依赖于存储在实例变量中的状态,您现在可能需要在 @BeforeEach
或 @AfterEach
生命周期方法中手动重置状态。
这是我的测试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.Before
和 org.junit.jupiter.api.BeforeAll
.
此外,标记为 @BeforeEach
的代码在每次测试之前执行,而 @BeforeAll
运行 在整个测试夹具之前执行一次。
为了能够 运行 @BeforeAll
在 non-static 方法上,您可以更改测试实例的生命周期:
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
不过你必须小心,因为测试 class 实例现在只创建一次,而不是每个测试方法一次。如果您的测试方法依赖于存储在实例变量中的状态,您现在可能需要在 @BeforeEach
或 @AfterEach
生命周期方法中手动重置状态。