Spring Boot单元测试使用MockBean注解向Service注入Mock对象

1. 背景介绍

我们在测试时有一个Service,我们需要测试Service,但Service内部依赖ServiceA、ServiceB,此时我们希望Mock ServiceA,ServiceB 注入真实对象。

java 复制代码
class Service {
    private ServiceA A;
    private ServiceB B;
     
    public int methodA() { return A.a();}
    public int methodB() { return B.b();}
}

2.使用@MockBean注解来模拟依赖对象

在Spring Boot Test中使用@Spy注解标记Service对象,但是其余真实对象无法注入,因为@Spy注解只能部分模拟对象,而无法注入真实对象。在这种情况下,可以使用@Autowired注解来自动注入Service对象,并使用@MockBean注解来模拟依赖对象。

java 复制代码
@RunWith(SpringRunner.class)
@SpringBootTest
public class ServiceTest {

    @Autowired
    private Service service;

    @MockBean
    private ServiceA serviceA;

    @Test
    public void testMethodA() {
        // 模拟UserDao的部分方法
        Mockito.doReturn(1).when(serviceA).a(Mockito.any());

        // 调用UserService的方法
        int s = service.methodA();

        // 验证结果
        assertEquals(1, s);
    }

    @Test
    public void testOtherMethod() {
        // 使用真实的方法
        service.methodB();
        // 验证结果
        // ...
    }
}

我们使用了@Autowired注解来自动注入Service对象,并使用@MockBean注解来模拟serviceA对象。在testMethodA方法中,我们使用Mockito.doReturn方法来模拟ServiceA对象的部分方法,并调用userService.methodA方法进行测试。在testOtherMethod方法中,我们直接调用userService.otherMethod方法进行测试。

在使用Mockito进行单元测试时,可以使用@MockBean注解来模拟依赖对象,并使用@Autowired注解来自动注入需要测试的对象。这样,就可以在Spring上下文中同时使用模拟对象和真实对象,并进行更加全面和准确的测试

3. 总结

@MockBean注解是Spring Boot提供的一个注解,用于模拟依赖对象。它的作用是在Spring上下文中创建一个模拟对象,并将其注入到被测试对象中,以便进行单元测试。

相关推荐
毕业设计-小慧20 小时前
计算机毕业设计springboot电影选座与订票系统 基于SpringBoot的影院在线票务管理平台 基于SpringBoot的智能影厅座位预约系统
spring boot·后端·课程设计
常利兵21 小时前
Spring Boot + MyBatis,给数据穿上“隐形盔甲”
java·spring boot·mybatis
Sun 328521 小时前
MyBatis-Plus 新版代码生成器的使用
java·spring boot·后端·spring·配置·mybatis-plus·代码生成器
金銀銅鐵21 小时前
浅解 JUnit 4 第十八篇:@BeforeClass/@AfterClass 注解如何发挥作用?
junit·单元测试
visual_zhang21 小时前
大型 iOS 工程单元测试 — 变更驱动测试与跨模块 Mock
单元测试·代码规范
淘源码d1 天前
基于Spring Boot + Vue的诊所管理系统(源码)全栈开发指南
java·vue.js·spring boot·后端·源码·门诊系统·诊所系统
行者-全栈开发1 天前
JDK 17 + Spring Boot 3.5.8:企业级开发技术栈全景
java·开发语言·spring boot·系统架构·技术栈·系统架构全景分析·springboot技术栈
indexsunny1 天前
互联网大厂Java面试实战:微服务与Spring Boot在电商场景下的应用解析
java·spring boot·redis·docker·微服务·kubernetes·oauth2
无关86881 天前
Springboot集成kafka
spring boot·kafka
DJ斯特拉1 天前
SpringBoot项目的基本构建
java·spring boot·后端