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上下文中创建一个模拟对象,并将其注入到被测试对象中,以便进行单元测试。

相关推荐
Tirzano2 小时前
springsecurity自定义认证
spring boot·spring
bing_1585 小时前
简单工厂模式 (Simple Factory Pattern) 在Spring Boot 中的应用
spring boot·后端·简单工厂模式
天上掉下来个程小白6 小时前
案例-14.文件上传-简介
数据库·spring boot·后端·mybatis·状态模式
sjsjsbbsbsn8 小时前
Spring Boot定时任务原理
java·spring boot·后端
计算机毕设指导69 小时前
基于Springboot学生宿舍水电信息管理系统【附源码】
java·spring boot·后端·mysql·spring·tomcat·maven
计算机-秋大田9 小时前
基于Spring Boot的兴顺物流管理系统设计与实现(LW+源码+讲解)
java·vue.js·spring boot·后端·spring·课程设计
小蒜学长10 小时前
医疗报销系统的设计与实现(代码+数据库+LW)
数据库·spring boot·学习·oracle·课程设计
橘猫云计算机设计11 小时前
基于SSM的《计算机网络》题库管理系统(源码+lw+部署文档+讲解),源码可白嫖!
java·数据库·spring boot·后端·python·计算机网络·毕设
小盼江11 小时前
水果生鲜农产品推荐系统 协同过滤余弦函数推荐水果生鲜农产品 Springboot Vue Element-UI前后端分离 代码+开发文档+视频教程
vue.js·spring boot·ui
33三 三like12 小时前
软件测试:1、单元测试
数据库·sqlserver·log4j