集成测试时 MockMvc 无法注入
程序员小航
共 1575字,需浏览 4分钟
·
2022-06-19 12:59
如果阅读过 使用 Junit 编写单元测试[1] 的小伙伴都知道,在写对 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 过滤器,导致需要登录,从而集成测试失败
近期在开发中写单元测试比较多,并且在写单元测试时也遇到不少问题,以及总结了一些心得,后续会总结相关文章。
引用链接:
使用 Junit 编写单元测试: https://mp.weixin.qq.com/s/HUhWUk01ICZ5ppwHhcc8ZA
- <End /> -
评论
Stub_On_WebAPI 集成测试
Stub_On_Web可以创建stubURL来测试API外部集成。Stub_On_Web 可用于减轻和其他系统API服务集成的多场景测试。
Stub_On_WebAPI 集成测试
0
TempestOpenStack 集成测试
Tempest是一个旨在为云计算平台OpenStack提供集成测试的开源项目。它是基于unittest2和nose建立的灵活且易于扩展及维护的自动化测试框架,使得OpenStack相关测试效率得到大幅
TempestOpenStack 集成测试
0
JNDI-Injection-ExploitJNDI 注入测试工具
JNDI-Injection-Exploit —— JNDI 注入利用工具,生成 JNDI 链接并启
JNDI-Injection-ExploitJNDI 注入测试工具
0
JNDI-Injection-ExploitJNDI 注入测试工具
JNDI-Injection-Exploit——JNDI注入利用工具,生成JNDI链接并启动后端相关服务,可用于Fastjson、Jackson等相关漏洞的验证。使用可执行程序为jar包,在命令行中运
JNDI-Injection-ExploitJNDI 注入测试工具
0