Java中Mock的写法

mock是什么?

Mock 是一种在软件开发中常用的测试技术,用于模拟(mocking)对象或类的行为,以便在单元测试中隔离测试目标对象并验证其行为,而无需依赖外部系统或复杂的环境。Mock 对象通常用于模拟依赖项的行为,使得测试更加可控和快速。

简单来说,mock就是设置一个对象的行为,一个对象里面有各种各样的方法,mock可以改变里面方法的行为,比如说你现在需要测试A类里面的a方法,a方法里面调用了B类的b方法,但是你现在测试的是a方法的逻辑,不需要关注b方法的具体逻辑,只需要b方法返回的对象就行,所以你就可以mock一个b方法的行为,让其不用执行具体的逻辑,而是返回一个符合规范的对象即可。下面是个简单的例子:

A类

java 复制代码
@Service
public class A {
    @Autowired
    private B bClass;

    public void a(String msg) {
        System.out.println("a方法执行 --- start");
        System.out.println("b方法执行 --- " + bClass.b(msg));
        System.out.println("a方法执行 --- end");
    }
}

B类

java 复制代码
@Service
public class B {

    public String b(String msg) {
        System.out.println("b方法逻辑");
        return  msg;
    }
}

mock单元测试类:

java 复制代码
@RunWith(MockitoJUnitRunner.class)
public class MockABTest {
    @InjectMocks
    private A aClass;
    @Mock
    private B bClass;

    @Test
    public void testABMock() {
        when(bClass.b(any())).thenReturn("直接跳过b方法的逻辑");
        aClass.a("你好");
    }
}

测试结果:

Mockito

依赖:

XML 复制代码
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <scope>test</scope>
        </dependency>

注解:

语法 说明
@Mock 注解 在字段上标记,自动创建 Mock 对象
Mockito.mock(Class) 方法 手动创建 Mock 对象(适用于不支持注解的场景)
@InjectMocks 注解 将 Mock 对象自动注入到被测试类中
相关推荐
哦虎!3 小时前
【JavaEE】网络初识
java
for_ever_love__3 小时前
MySQL ORDER BY 排序优化:从 Using filesort 到索引有序扫描(含双路 / 单路排序原理)
java·mysql·优化·存储·by·order·filesort
程序猿追4 小时前
kotlin-retry 接入鸿蒙后,怎样确认它真的会停止重试
开发语言·kotlin·harmonyos
我是人✓4 小时前
Java文件上传三方式对比:从传统到SpringBoot
java·开发语言
智能直播4 小时前
网络RTMP拉流不卡顿、声音不同步,一文讲透缓冲区、时间戳
开发语言·ffmpeg·php·音视频·视频编解码
欣栀♡4 小时前
JVM 频繁 Full GC 先看日志括号里的 cause,jstat 的 FGC 在 JDK 8 上会骗人
java·jvm
IT研究室5 小时前
最新计算机毕业设计选题推荐-基于spring boot的葡萄酒文化宣传网站-网站-文档指导-Java-springboot
java·spring boot·课程设计
慧都小项5 小时前
MyEclipse 中创建和测试 JAX-RS REST 接口:从项目配置到 REST Explorer
java·restful·myeclipse·jax-rs
Wang's Blog5 小时前
Java 项目实战: 交友项目 - 入门案例:编写 Dubbo 服务提供者
java·dubbo·交友
墨云安全5 小时前
内网资产无法暴露到公网,怎么做安全检测?2026 年内网渗透测试的落地路径
开发语言·安全·网络安全·渗透测试·php