什么是 Mockito?
Mockito 是一个用于 Java 的开源 Mock 框架,常与 JUnit 配合使用,用于在单元测试中模拟(mock)外部依赖,如数据库连接、网络服务、第三方 API 等,从而让测试更专注、更快、更可靠。
基本用法示例
以下是一个简单的 Mockito 使用示例:
// 被测试的类
public class UserService {
private UserRepository userRepository;
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
public String getUserName(int id) {
return userRepository.findById(id).getName();
}
}
// 单元测试
@Test
public void testGetUserName() {
// 创建 mock 对象
UserRepository mockRepo = Mockito.mock(UserRepository.class);
// 定义 mock 行为
User mockUser = new User(1, "张三");
Mockito.when(mockRepo.findById(1)).thenReturn(mockUser);
// 执行测试
UserService service = new UserService(mockRepo);
String name = service.getUserName(1);
// 验证结果
assertEquals("张三", name);
}
常用注解
@Mock:创建并注入 mock 对象@InjectMocks:创建被测试对象,并自动注入 @Mock 标记的对象@Spy:创建部分 mock(真实对象,可 stub 特定方法)@Captor:捕获方法参数用于验证
验证方法调用
Mockito 允许你验证某个方法是否被调用、调用次数等:
Mockito.verify(mockRepo).findById(1); // 验证 findById(1) 被调用一次
Mockito.verify(mockRepo, times(2)).save(any()); // 验证 save 被调用两次
进阶技巧
- 使用
doReturn().when()处理 void 方法或异常 - 使用
ArgumentCaptor捕获传入参数进行断言 - 结合
@ExtendWith(MockitoExtension.class)(JUnit 5)简化 setup