在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