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");
}
}
3356

被折叠的 条评论
为什么被折叠?



