Spring test 在Spring Boot中设置集成测试数据

Spring test 在Spring Boot中设置集成测试数据,spring-test,spring-boot-test,Spring Test,Spring Boot Test,这是我的测试课 @SpringBootTest @ActiveProfiles(“测试”) 公共MyTest{ ... @以前 公共void init(){ System.out.println(“:--start init()--”; ... } ... } 奇怪的是,init()由于某种原因无法运行。如果我将@Before更改为@BeforeAll,并将方法更改为static,则init()将运行。问题是,这些数据设置代码没有在静态方法中运行,我无法将它们全部更改为在静态块中运行。现在,我

这是我的测试课

@SpringBootTest
@ActiveProfiles(“测试”)
公共MyTest{
...
@以前
公共void init(){
System.out.println(“:--start init()--”;
...
}
...
}
奇怪的是,
init()
由于某种原因无法运行。如果我将
@Before
更改为
@BeforeAll
,并将方法更改为static,则
init()
将运行。问题是,这些数据设置代码没有在静态方法中运行,我无法将它们全部更改为在静态块中运行。现在,我在每个测试方法中都有以下代码来克服这个问题

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

我想知道为什么之前的
@无法运行。有什么建议吗?

在JUnit5中,
@beforeach
@BeforeAll
注释与JUnit4中的
@BeforeClass
是等价的

@Before
是JUnit4注释,而
@BeforeAll
是JUnit5注释。您还可以从导入
org.junit.Before
org.junit.jupiter.api.BeforeAll
中看到这一点

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

为了能够在非静态方法上运行
@BeforeAll
,您可以使用以下方法更改测试实例的生命周期:

@TestInstance(TestInstance.Lifecycle.PER_类)

但是您必须小心,因为测试类实例现在只创建一次,而不是每个测试方法创建一次。如果您的测试方法依赖于实例变量中存储的状态,您现在可能需要在每个生命周期方法的前后手动重置状态,
@beforeach
@BeforeAll
注释与JUnit4中的
@beforeach
@BeforeClass
是等价的

@Before
是JUnit4注释,而
@BeforeAll
是JUnit5注释。您还可以从导入
org.junit.Before
org.junit.jupiter.api.BeforeAll
中看到这一点

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

为了能够在非静态方法上运行
@BeforeAll
,您可以使用以下方法更改测试实例的生命周期:

@TestInstance(TestInstance.Lifecycle.PER_类)

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

谢谢您提供的信息。Spring2.4.M似乎同时包含JUnit4和JUnit5。对于这种情况,我只需要为整个测试夹具设置一次数据。正如@BeforeAll使用静态方法一样,我需要弄清楚如何调用非静态方法。如果您想在没有静态方法的情况下运行它一次,可以使用@TestInstance(TestInstance.lifecycle.PER_CLASS)更改测试实例生命周期。但是,您必须小心您的状态管理,因为现在它不会为每个方法重新创建测试类。我将修改我的答案以包含此信息。谢谢提供更多信息。我想知道为什么注释要求使用静态方法。为了解决这个限制,我正在考虑使用一个方法创建一个类间函数来包装数据初始化。测试的数据设置部分用于填充只读使用的测试数据。所以,这些测试没有州问题。谢谢你提供的信息。Spring2.4.M似乎同时包含JUnit4和JUnit5。对于这种情况,我只需要为整个测试夹具设置一次数据。正如@BeforeAll使用静态方法一样,我需要弄清楚如何调用非静态方法。如果您想在没有静态方法的情况下运行它一次,可以使用@TestInstance(TestInstance.lifecycle.PER_CLASS)更改测试实例生命周期。但是,您必须小心您的状态管理,因为现在它不会为每个方法重新创建测试类。我将修改我的答案以包含此信息。谢谢提供更多信息。我想知道为什么注释要求使用静态方法。为了解决这个限制,我正在考虑使用一个方法创建一个类间函数来包装数据初始化。测试的数据设置部分用于填充只读使用的测试数据。因此,这些测试不存在州问题。