关于后端:集成测试时-MockMvc-无法注入

如果浏览过 应用 Junit 编写单元测试 的小伙伴都晓得,在写对 Controller 进行单元测试时,会将 Service 层进行 Mock。

大略样子如下:

然而除了单元测试,还须要写集成测试,就是模仿全流程的申请。

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

能够用以下两种形式解决该问题:

办法一

移除 @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 过滤器,导致须要登录,从而集成测试失败

本文由mdnice多平台公布

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据