集成测试时 MockMvc 无法注入

如果阅读过 使用 Junit 编写单元测试[1] 的小伙伴都知道,在写对 Controller 进行单元测试时,会将 Service 层进行 Mock。

大概样子如下:

93fcee39bfe81c0558330bade8579ff8.png

但是除了单元测试,还需要写集成测试,就是模拟全流程的请求。

集成测试同样使用的是 MockMvc,但是如果像单元测试一样加上 @WebMvcTest 就不太可以,因为 Service 代码没有 mock 掉,就会报错。

e32f11b31c0e46424e77d68e232ae42a.png

可以用以下两种方式解决该问题:

方法一

移除 @Autowired 注解,并手动声明 MockMvc。

在 @Before 中使用 MockMvcBuilders.webAppContextSetup 即可手动声明 MockMvc。

@WebAppConfiguration
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserInfoControllerTest {

    @Autowired
    private WebApplicationContext webApplicationContext;
    
    private MockMvc mockMvc;
    
    @Before
    public void setUp() {
        mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
    }
    
    // ... 省略
}

方法二

使用 @AutoConfigureMockMvc 注解,这样就可以使用 @Autowired 即可注入 MockMvc 对象。

@WebAppConfiguration
@AutoConfigureMockMvc(addFilters = false)
@RunWith(SpringRunner.class)
@SpringBootTest
public class AccessRecordControllerTest {

    @Autowired
    private MockMvc mockMvc;

    // ... 省略
}

注意:

需要添加 addFilters = false 否则可能会导致走 AntBuservice 过滤器,导致需要登录,从而集成测试失败

近期在开发中写单元测试比较多,并且在写单元测试时也遇到不少问题,以及总结了一些心得,后续会总结相关文章。

引用链接:

[1]

使用 Junit 编写单元测试: https://mp.weixin.qq.com/s/HUhWUk01ICZ5ppwHhcc8ZA

- <End /> -

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小航

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值