生成测试用例
为现有代码自动生成全面的测试用例,支持 Jest、Mocha、Vitest 等测试框架,确保代码质量和测试覆盖率。
适用场景
- 新项目需要建立测试体系
- 遗留代码缺乏测试覆盖
- 重构前需要回归测试保护
- 测试覆盖率不达标需要补充
复制命令
# 基础命令
为 src/utils/helper.js 生成完整的单元测试用例
# 指定测试框架
使用Jest为所有组件生成测试用例,包含快照测试
# 覆盖率导向生成
分析测试覆盖率并为未覆盖的代码生成测试用例
# 批量生成
为 src/components 目录下所有文件生成对应的测试文件
执行步骤
1. 分析代码结构
Claude Code 会自动:
- 识别函数、类和模块的导出
- 分析参数类型和返回值
- 检测异常处理和边界条件
- 理解业务逻辑和数据流
2. 生成测试策略
根据代码特点生成:
- 纯函数:输入输出测试、边界值测试
- 类方法:构造函数、public方法、状态变更测试
- React组件:渲染测试、交互测试、props测试
- 异步函数:Promise/async-await测试、错误处理
3. 创建测试文件
// 自动生成的测试文件示例
import { calculateTotal, validateEmail } from '../utils/helper';
describe('helper.js', () => {
describe('calculateTotal', () => {
test('should calculate total with tax', () => {
const result = calculateTotal(100, 0.1);
expect(result).toBe(110);
});
test('should handle zero amount', () => {
const result = calculateTotal(0, 0.1);
expect(result).toBe(0);
});
test('should handle negative tax rate', () => {
expect(() => calculateTotal(100, -0.1))
.toThrow('Tax rate cannot be negative');
});
});
describe('validateEmail', () => {
test.each([
['user@example.com', true],
['invalid.email', false],
['', false],
[null, false]
])('should validate email %s as %s', (email, expected) => {
expect(validateEmail(email)).toBe(expected);
});
});
});
4. 运行和优化测试
# 运行新生成的测试
npm test
# 检查覆盖率
npm test -- --coverage
# 如果有失败,让Claude Code修复
npm test -- --verbose
验证命令
# 运行所有测试
npm test
# 生成覆盖率报告
npm test -- --coverage --coverageReporters=html
# 检查特定文件的测试
npm test -- --testNamePattern="helper.js"
测试生成策略
纯函数测试
- ✅ 正常输入输出测试
- ✅ 边界值和极值测试
- ✅ 异常输入处理测试
- ✅ 类型检查测试
类和对象测试
- ✅ 构造函数参数验证
- ✅ 公共方法行为测试
- ✅ 状态变更和副作用测试
- ✅ 继承和多态测试
React 组件测试
- ✅ 基础渲染测试(快照)
- ✅ Props 传递和验证
- ✅ 事件处理和交互
- ✅ 状态变化和生命周期
异步代码测试
- ✅ Promise 成功和失败场景
- ✅ async/await 语法测试
- ✅ 超时和重试机制
- ✅ 并发和竞态条件
💡 智能测试生成:Claude Code 会根据代码的复杂度和业务逻辑自动调整测试策略,确保测试的有效性。
高级功能
Mock 和 Stub 生成
// 自动生成的 Mock 示例
jest.mock('../services/api', () => ({
fetchUser: jest.fn(),
updateUser: jest.fn()
}));
const { fetchUser } = require('../services/api');
beforeEach(() => {
fetchUser.mockClear();
});
集成测试用例
// 自动生成的集成测试
describe('User Service Integration', () => {
test('should create and retrieve user', async () => {
const userData = { name: 'John', email: 'john@example.com' };
const createdUser = await createUser(userData);
const retrievedUser = await getUser(createdUser.id);
expect(retrievedUser).toMatchObject(userData);
});
});
覆盖率目标
生成的测试用例通常能达到:
- 语句覆盖率:90%+
- 分支覆盖率:85%+
- 函数覆盖率:95%+
- 行覆盖率:90%+
风险提示与注意事项
注意事项:
- 生成的测试需要人工审查和调整
- 某些业务逻辑可能需要更复杂的测试场景
- Mock 数据应该反映真实的业务场景
最佳实践:
- 先运行测试确保都能通过
- 检查测试的意义性,避免无效测试
- 根据业务需求调整测试数据
- 定期维护和更新测试用例
相关卡片
- 修复Jest单测失败 - 修复生成测试中的问题
- 代码覆盖率分析 - 深入分析覆盖情况
- 测试驱动开发 - TDD项目模板