测试指南
wescode 集成了强大的 AI 辅助测试能力,帮助开发者高效编写、运行和维护测试。从自动生成测试用例到覆盖率分析,wescode 让测试工作更轻松。
自动测试生成
AI 生成测试
wescode 能根据源代码自动生成测试用例:
- 打开需要测试的源文件
- 在 Chat 面板中输入:
为这个文件生成单元测试 - AI 分析代码逻辑,生成覆盖主要路径的测试
示例:对于一个 Go 函数:
// user.go
func ValidateEmail(email string) error {
if email == "" {
return errors.New("email is required")
}
if !strings.Contains(email, "@") {
return errors.New("invalid email format")
}
return nil
}
AI 自动生成的测试:
// user_test.go
func TestValidateEmail(t *testing.T) {
tests := []struct {
name string
email string
wantErr bool
errMsg string
}{
{"valid email", "user@example.com", false, ""},
{"empty email", "", true, "email is required"},
{"missing @", "userexample.com", true, "invalid email format"},
{"only @", "@", false, ""},
{"unicode email", "用户@example.com", false, ""},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
err := ValidateEmail(tt.email)
if (err != nil) != tt.wantErr {
t.Errorf("ValidateEmail(%q) error = %v, wantErr %v", tt.email, err, tt.wantErr)
}
if tt.wantErr && err.Error() != tt.errMsg {
t.Errorf("ValidateEmail(%q) error = %q, want %q", tt.email, err.Error(), tt.errMsg)
}
})
}
}
生成策略
AI 生成测试时遵循以下策略:
| 策略 | 说明 |
|---|---|
| 正常路径覆盖 | 测试函数的预期行为 |
| 边界值测试 | 空值、零值、极大值、极小值 |
| 错误路径覆盖 | 各种错误条件的处理 |
| 表驱动测试 | Go 语言推荐的测试模式 |
| Mock 生成 | 自动为外部依赖生成 Mock |
针对特定场景生成
你可以在 Chat 中指定更精确的测试需求:
# 生成并发安全测试
为 UserCache 生成并发读写的测试用例
# 生成集成测试
为 UserService.CreateUser 生成调用真实数据库的集成测试
# 生成 Benchmark
为 ParseJSON 函数生成基准测试
测试运行
在编辑器中运行测试
wescode 在测试函数上方显示运行按钮:
- ▶ Run Test:运行单个测试
- ▶ Run All Tests:运行文件中所有测试
- 🐛 Debug Test:以调试模式运行
通过命令面板运行
Ctrl+Shift+P → "Test: Run All Tests"
Ctrl+Shift+P → "Test: Run Test at Cursor"
Ctrl+Shift+P → "Test: Run Failed Tests"
通过终端运行
wescode 的智能终端会识别测试命令并提供增强输出:
# Go
go test ./...
go test -v -run TestValidateEmail ./pkg/user/
# TypeScript/JavaScript
npm test
npx jest --watch
# Python
pytest -v
python -m pytest tests/
# Rust
cargo test
cargo test -- --nocapture
测试结果展示
测试运行后,结果以多种方式展示:
- 测试面板:树形结构展示所有测试及其状态(✅ 通过 / ❌ 失败 / ⏭ 跳过)
- 编辑器装饰:在测试函数旁显示最近一次运行结果
- 终端输出:详细的测试日志
- 问题面板:失败的测试会出现在"问题"面板中
覆盖率分析
生成覆盖率报告
# Go
go test -coverprofile=coverage.out ./...
go tool cover -html=coverage.out
# TypeScript
npx jest --coverage
# Python
pytest --cov=src --cov-report=html
编辑器内覆盖率显示
运行覆盖率分析后,wescode 会在编辑器中直接标注:
- 🟢 绿色行:已覆盖的代码行
- 🔴 红色行:未覆盖的代码行
- 🟡 黄色行:部分覆盖(如条件分支只覆盖了一半)
覆盖率目标
wescode 支持配置覆盖率阈值:
// .vscode/settings.json
{
"wescode.testing.coverageThreshold": {
"lines": 80,
"branches": 70,
"functions": 85
}
}
当覆盖率低于阈值时,会在状态栏显示警告。
AI 覆盖率建议
AI 分析未覆盖的代码区域,建议补充测试的优先级:
- 高优先级:核心业务逻辑、错误处理路径
- 中优先级:辅助函数、数据转换
- 低优先级:简单的 getter/setter、日志语句
TDD 工作流
红-绿-重构循环
wescode 支持 TDD(Test-Driven Development)工作流:
第一步:红(编写失败的测试)
在 Chat 中输入:
"我需要一个 CalculateDiscount 函数,接受价格和折扣率,返回折后价。先帮我写测试。"
AI 生成测试用例(此时编译不通过,状态为红色)
第二步:绿(编写最小实现)
在 Chat 中输入:
"现在帮我实现 CalculateDiscount,让测试通过。"
AI 生成最简实现,所有测试通过(状态为绿色)
第三步:重构(优化代码)
在 Chat 中输入:
"重构 CalculateDiscount,处理边界情况(负数价格、超过100%的折扣率)。"
AI 先补充边界测试,再修改实现
TDD 快捷工作流
wescode 提供 TDD 专用面板,支持:
- Watch Mode:保存文件时自动运行相关测试
- 失败优先:优先显示失败的测试
- 快速跳转:从失败的测试跳转到对应的源代码
AI 辅助测试
测试修复
当测试失败时,AI 可以帮助诊断和修复:
在 Chat 中输入:
"这个测试失败了,帮我分析原因并修复"
AI 会:
1. 分析测试失败的错误信息
2. 检查源代码是否有 Bug
3. 判断是测试写错了还是代码有问题
4. 提供修复建议
测试重构
AI 可以帮助改进现有测试:
- 消除重复:提取公共的 setup/teardown 逻辑
- 表驱动化:将多个相似测试合并为表驱动测试
- 添加断言:补充缺失的断言
- 改进命名:让测试名称更好地描述预期行为
Mock 和 Stub 生成
AI 自动为外部依赖生成测试替身:
// AI 根据接口自动生成 Mock
type MockUserRepository struct {
FindByIDFunc func(ctx context.Context, id string) (*User, error)
SaveFunc func(ctx context.Context, user *User) error
}
func (m *MockUserRepository) FindByID(ctx context.Context, id string) (*User, error) {
return m.FindByIDFunc(ctx, id)
}
func (m *MockUserRepository) Save(ctx context.Context, user *User) error {
return m.SaveFunc(ctx, user)
}
回归测试
当修改代码后,AI 会:
- 识别受影响的测试范围
- 建议需要运行的测试集合
- 检测是否需要新增回归测试
- 验证修改没有破坏现有功能
注意事项
- AI 生成的测试用例需要人工审阅,确保断言是正确的
- 表驱动测试的测试数据应覆盖业务场景,不仅仅是技术边界
- 集成测试需要正确的环境配置(数据库、外部服务等)
- 覆盖率是参考指标,高覆盖率不等于高质量测试
- Mock 过多可能导致测试与实际行为脱节