我正在编写一些集成测试,在这些测试中,我需要发送一个api调用来创建一个资源,然后基于该资源执行后续的api调用。
在我的测试类中:
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
@ActiveProfiles("test")
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class ExampleResourceTest {
@Autowired
private MockMvc mockMvc;
@BeforeAll
private void createExampleResource() throws Exception {
Map<String, Object> requestBody = new HashMap<>();
requestBody.put("email", "example@email.com");
requestBody.put("username", "example");
requestBody.put("firstName", "Example");
requestBody.put("lastName", "Name");
requestBody.put("password", "@password123");
Gson gson = new Gson();
String json = gson.toJson(requestBody);
mockMvc.perform(
post("/api/v1/resourcename")
.contentType(MediaType.APPLICATION_JSON)
.content(json));
}
// More stuff...
}
但是,在运行类中的测试之前,没有调用标注为@BeforeAll方法的方法。
正如我在尝试寻找解决方案时所理解的那样,@BeforeAll方法需要是静态的。然而,这样我就不能使用我注入的MockMvc。我也尝试过用@TestInstance(TestInstance.Lifecycle.PER_CLASS)
注解我的测试类,但我也没有遇到任何运气。
2条答案
按热度按时间kmbjn2e31#
我认为
@BeforeAll
不应该是私有的,但你已经添加了它。这就是它不调用你的方法的原因。参考:https://junit.org/junit5/docs/5.0.0/api/org/junit/jupiter/api/BeforeAll.html
6ljaweal2#
结果发现我在junit 4上,需要使用@BeforeClass才能调用它,最后我使用了一个@Before方法,并使用一个布尔值来检查是否已经进行了调用。