集成测试时 MockMvc 无法注入

简介: 单元测试,还需要写集成测试,就是模拟全流程的请求。集成测试同样使用的是 MockMvc,但是如果像单元测试一样加上 @WebMvcTest 就不太可以,因为 Service 代码没有 mock 掉,就会报错。

如果阅读过 使用 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 过滤器,导致需要登录,从而集成测试失败

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

目录
相关文章
|
3月前
|
SQL 存储 数据库
Python 的安全性和测试:什么是 SQL 注入攻击?如何防范 SQL 注入?
Python 的安全性和测试:什么是 SQL 注入攻击?如何防范 SQL 注入?
72 1
|
3月前
|
SQL 安全 关系型数据库
接上篇文章,在测试宝塔 WAF 的未授权访问漏洞时无意间还发现了一个 SQL 注入漏洞
接上篇文章,在测试宝塔 WAF 的未授权访问漏洞时无意间还发现了一个 SQL 注入漏洞,品相还不错,可执行任意 SQL 语句。 总之,吃了一惊,一个防 SQL 注入的工具居然也有 SQL 注入漏洞。 请看这段代码
534 4
|
Java 测试技术 Spring
springboot测试环境无法注入bean问题分析及解决方案
springboot测试环境无法注入bean问题分析及解决方案
2774 0
springboot测试环境无法注入bean问题分析及解决方案
|
27天前
|
Java 测试技术 API
详解单元测试问题之Mockito的注入过程如何解决
详解单元测试问题之Mockito的注入过程如何解决
36 1
|
27天前
|
测试技术
详解单元测试问题之@InjectMocks注入mock对象如何解决
详解单元测试问题之@InjectMocks注入mock对象如何解决
25 1
|
19天前
|
安全 数据库连接 数据库
可靠性测试-故障注入工具
【7月更文挑战第19天】可靠性测试中的故障注入工具对评估系统容错性与稳定性至关重要。常见工具如 **FaultInjector** (模拟多类故障)、**Xception** (针对特定组件注入错误) 和 **Chaos Monkey** (验证云环境下系统弹性) 帮助开发者提前发现潜在问题, 优化系统设计, 如电商公司通过测试确保促销期稳定, 金融机构降低交易风险。选择合适工具并结合业务场景测试对提升可靠性至关重要。
|
1月前
|
SQL 安全 关系型数据库
使用SQLMap进行SQL注入测试
使用SQLMap进行SQL注入测试
|
8月前
|
SQL 网络安全 数据库
2021年中职“网络安全“江西省赛题—B-4:SQL注入测试(PL)
2021年中职“网络安全“江西省赛题—B-4:SQL注入测试(PL)
73 2
|
10月前
|
Kubernetes jenkins 测试技术
【Kubernetes的DevOps自动化,Jenkins上的Pipeline实现自动化构建、测试、部署、发布以及Bookinginfo实例的部署灰度发布故障注入流量】
【Kubernetes的DevOps自动化,Jenkins上的Pipeline实现自动化构建、测试、部署、发布以及Bookinginfo实例的部署灰度发布故障注入流量】
207 1
|
人工智能 Java 测试技术
解决SpringBoot 测试类无法自动注入@Autowired的问题
解决SpringBoot 测试类无法自动注入@Autowired的问题

热门文章

最新文章