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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章