单元测试时模拟对象Mockito

1. @Mock 注解

@Mock 注解的作用是创建一个模拟对象。模拟对象是实际对象的替代品,在测试期间,它能按照测试需求返回预设值,从而让你能专注于测试目标对象的逻辑,而不用受外部依赖的影响。

2. @InjectMocks 注解

@InjectMocks 注解的用途是创建一个真实对象,并且把使用 @Mock 注解创建的模拟对象注入到这个真实对象里。如此一来,你就能测试真实对象的方法,同时让其依赖的对象被模拟。

模拟方法调用

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;

// 定义一个简单的接口
interface Calculator {
    int add(int a, int b);
}

@ExtendWith(MockitoExtension.class)
public class MockExample1 {
    // 使用 @Mock 注解创建 Calculator 接口的模拟对象
    @Mock
    private Calculator calculator;

    @Test
    public void testMockCalculator() {
        // 定义模拟对象的行为,当调用 add 方法,参数为 2 和 3 时,返回 5
        Mockito.when(calculator.add(2, 3)).thenReturn(5);

        // 调用模拟对象的方法
        int result = calculator.add(2, 3);

        // 验证结果
        Mockito.verify(calculator).add(2, 3);
        System.out.println("计算结果: " + result);
    }
}

这里的 calculator.add(2,3)是跳过的对象,thenReturn(5)是返回值,到最后都会返回5.

Mockito.when(calculator.add(2, 3)).thenReturn(5);

这里的 MOckito.verify()是验证返回的结果的。

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;

// 定义一个文件操作类接口
interface FileService {
    String readFile(String filePath) throws Exception;
}

@ExtendWith(MockitoExtension.class)
public class MockExample2 {
    // 使用 @Mock 注解创建 FileService 接口的模拟对象
    @Mock
    private FileService fileService;

    @Test
    public void testMockException() throws Exception {
        // 定义模拟对象的行为,当调用 readFile 方法时抛出异常
        Mockito.when(fileService.readFile("test.txt")).thenThrow(new Exception("文件读取错误"));

        try {
            // 调用模拟对象的方法
            fileService.readFile("test.txt");
        } catch (Exception e) {
            System.out.println("捕获到异常: " + e.getMessage());
        }

        // 验证方法是否被调用
        Mockito.verify(fileService).readFile("test.txt");
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小懒懒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值