Spring Boot 1.5.x 结合 JUnit5 进行接口测试
在Spring Boot 1.5.x中,默认使用Junit4进行测试。而在对Controller进行接口测试的时候,使用 @AutoConfigureMockMvc
注解是不能注入 MockMvc
对象的。因此只能使用 WebApplicationContext
类去构建 MockMvc
对象。
在Spring Boot 1.5.x + Junit4 的前提下,测试类的代码是这样写的:
@SpringBootTest
@RunWith(SpringRunner.class)
public class DemoControllerTest {
@Autowired
private WebApplicationContext webApplicationContext;
private MockMvc mockMvc;
@Before
public void setup() {
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}
@Test
public void demoTest() {
MvcResult mvcResult = mockMvc.perform(post("/api/demo")
.contentType(MediaType.APPLICATION_JSON)
.content(jsonStr))
.andExpect(jsonPath("$.data").values(expectedValue))
.andDo(print())
.andReturn();
}
}
但是,当我们把Junit版本升级到Junit5时,由于Junit5不再支持@RunWith
注解,导致我们无法获取到 WebApplicationContext
对象,测试也就无法运行了。
经过网上各种搜索,终于找到一个既能完成测试,又不需要升级 Spring Boot 版本的方法。
我们在pom.xml
中引入如下包
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
<!-- ... -->
<dependency>
<groupId>com.github.sbrannen</groupId>
<artifactId>spring-test-junit5</artifactId>
<version>1.5.0</version>
<scope>test</scope>
</dependency>
这样就可以在测试类上加上 @ExtendWith(SpringExtension.class)
,使 WebApplicationContext
的对象可以被自动注入了。
spring-test-junit5 的 github 地址见 https://github.com/sbrannen/spring-test-junit5