什么是 Mock 单元测试?
Mock 单元测试是一种软件测试方法,通过使用“模拟对象”(Mock Objects)来替代真实依赖,从而隔离被测代码,确保测试仅验证目标逻辑,而不受外部系统(如数据库、网络服务等)影响。
为什么使用 Mock?
- 提高测试速度:避免调用真实外部服务。
- 增强稳定性:不受第三方服务状态干扰。
- 提升覆盖率:可模拟异常路径和边界条件。
- 解耦测试:每个单元独立验证,不依赖其他模块状态。
常见 Mock 工具
JavaScript:Jest、Sinon.js、Vitest
Python:unittest.mock、pytest-mock
Java:Mockito、EasyMock
C#:Moq、NSubstitute
简单示例(JavaScript + Jest)
// 被测函数
function getUserInfo(apiClient, userId) {
return apiClient.fetchUser(userId).then(user => ({
id: user.id,
name: user.name.toUpperCase()
}));
}
// 测试
test('should return formatted user info', () => {
const mockApiClient = {
fetchUser: jest.fn().mockResolvedValue({ id: 1, name: 'alice' })
};
return getUserInfo(mockApiClient, 1).then(result => {
expect(result.name).toBe('ALICE');
expect(mockApiClient.fetchUser).toHaveBeenCalledWith(1);
});
});