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

posted @ 2023-05-14 11:30  飞鸟_Asuka  阅读(166)  评论(0编辑  收藏  举报