测试辅助
wescode 为开发者提供全面的测试辅助功能,从自动生成测试用例到覆盖率分析,帮助你写出更可靠的代码。
AI 生成测试用例
基本用法
选中一个函数或类,让 AI 生成测试:
为这个 CalculateDiscount 函数生成单元测试
wescode 会分析函数的:
- 输入参数:类型、范围、约束
- 返回值:正常返回和错误情况
- 副作用:外部调用、状态变更
- 边界条件:空值、极值、特殊字符
生成的测试包括:
- 正常路径的测试
- 错误处理的测试
- 边界条件的测试
- 参数验证的测试
指定测试框架
wescode 自动检测项目使用的测试框架,也支持手动指定:
用 pytest 为这个函数生成测试
用 Jest 生成测试,使用 describe/it 风格
支持的测试框架:
| 语言 | 框架 |
|---|---|
| Go | testing、testify |
| JavaScript/TypeScript | Jest、Vitest、Mocha |
| Python | pytest、unittest |
| Java | JUnit、TestNG |
| Rust | 内置 test |
| C# | xUnit、NUnit |
表驱动测试
对于适合表驱动的场景,wescode 会自动采用这种模式:
用表驱动的方式为这个解析函数生成测试
示例输出(Go):
func TestParseConfig(t *testing.T) {
tests := []struct {
name string
input string
want *Config
wantErr bool
}{
{"valid config", `{"port":8080}`, &Config{Port: 8080}, false},
{"empty input", "", nil, true},
{"invalid json", "{bad", nil, true},
{"missing required field", `{}`, nil, true},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := ParseConfig(tt.input)
if (err != nil) != tt.wantErr {
t.Errorf("ParseConfig() error = %v, wantErr %v", err, tt.wantErr)
return
}
if !reflect.DeepEqual(got, tt.want) {
t.Errorf("ParseConfig() = %v, want %v", got, tt.want)
}
})
}
}
Mock 生成
这个函数依赖了数据库,帮我生成 mock 和测试
wescode 会:
- 识别需要 mock 的依赖
- 生成接口定义(如果还没有)
- 生成 mock 实现
- 编写使用 mock 的测试
测试覆盖率分析
查看覆盖率
运行测试并分析覆盖率
wescode 会执行测试并解读覆盖率报告:
- 行覆盖率:哪些代码行没有被测试覆盖
- 分支覆盖率:哪些条件分支没有被测试
- 函数覆盖率:哪些函数没有测试
覆盖率提升
覆盖率只有 60%,帮我找出最值得补充测试的地方
wescode 会根据以下优先级推荐补充测试的位置:
- 关键业务路径:核心业务逻辑
- 高复杂度代码:复杂条件判断
- 错误处理路径:异常和错误分支
- 最近修改的代码:新增或变更的代码
覆盖率报告解读
帮我解读这个覆盖率报告,有哪些关键的缺口?
边界条件发现
自动发现边界条件
wescode 通过分析代码逻辑,自动发现容易遗漏的边界条件:
这个函数有哪些边界条件需要测试?
常见的边界条件类别:
| 类别 | 示例 |
|---|---|
| 空值/零值 | nil、""、0、空数组 |
| 极限值 | 整数最大值/最小值、超长字符串 |
| 类型边界 | Unicode 字符、特殊字符、换行符 |
| 并发条件 | 竞态、死锁、饥饿 |
| 时间相关 | 超时、时区、闰年、夏令时 |
| 资源限制 | 内存不足、磁盘满、网络断开 |
模糊测试建议
这个解析器适合做模糊测试吗?帮我生成 fuzz 测试
示例输出(Go):
func FuzzParseInput(f *testing.F) {
f.Add("normal input")
f.Add("")
f.Add("日本語テスト")
f.Add(strings.Repeat("a", 10000))
f.Fuzz(func(t *testing.T, input string) {
result, err := ParseInput(input)
if err == nil && result == nil {
t.Error("nil result without error")
}
})
}
TDD 工作流
测试先行开发
wescode 支持 TDD(测试驱动开发)工作流:
我要实现一个用户注册功能,先帮我写测试
TDD 流程:
-
Red:AI 生成失败的测试用例
生成用户注册功能的测试用例,先不写实现 -
Green:根据测试编写最小实现
现在帮我写最小的实现代码让测试通过 -
Refactor:在测试保护下重构
测试都通过了,帮我重构一下让代码更整洁
增量 TDD
对于复杂功能,wescode 支持增量 TDD:
用户注册功能需要:
1. 验证邮箱格式
2. 检查用户名唯一性
3. 密码强度校验
4. 发送验证邮件
帮我从第一个需求开始,逐步 TDD
wescode 会一步步引导你:
- 先写邮箱验证的测试 → 实现 → 重构
- 再写用户名唯一性的测试 → 实现 → 重构
- 依此类推
测试框架集成
自动检测框架
wescode 会自动检测项目使用的测试框架:
- 读取
package.json、go.mod、requirements.txt等 - 扫描现有测试文件的导入
- 识别项目的测试目录结构
测试运行
在聊天面板中直接运行测试:
运行这个文件的测试
只运行和我这次修改相关的测试
运行所有失败的测试
测试命令通过 wescode 内置终端执行:
- 验证类命令(
go test、npm test)使用只读终端 tab - 结果高亮:通过/失败状态清晰标记
- 失败定位:点击失败测试直接跳转到源码
测试配置
wescode 能帮你配置测试环境:
帮我配置 Jest,让它支持 TypeScript 和路径别名
配置 Go 的测试,使用 testify 和 mockery
集成测试
为这个 API 端点生成集成测试
wescode 会生成包含以下内容的集成测试:
- HTTP 请求构建
- 响应断言
- 数据库状态验证
- 清理逻辑
最佳实践
测试命名
wescode 遵循测试命名最佳实践:
- 明确的测试意图:
TestCreateUser_WithDuplicateEmail_ReturnsConflictError - 一致的命名风格:跟随项目现有模式
- 可读的描述:测试名即文档
测试组织
帮我把这些测试按功能分组整理
推荐的测试组织方式:
tests/
├── unit/ # 单元测试
├── integration/ # 集成测试
├── e2e/ # 端到端测试
├── fixtures/ # 测试数据
└── helpers/ # 测试工具函数
测试数据管理
帮我为这些测试创建合适的测试 fixtures
wescode 会根据数据模型生成合理的测试数据。
注意事项
- 测试隔离:生成的测试保证相互独立,不依赖执行顺序
- 确定性:避免使用随机数据和时间依赖,除非是模糊测试
- 性能:单元测试应该快速执行,超过 1 秒的测试应标记为慢速测试
- 维护性:测试代码也是代码,保持简洁可读
- CI 兼容:生成的测试确保在 CI 环境中也能通过
- 工作区隔离:测试运行在当前 workspace Cell 中,不影响其他工作区