测试指南

wescode 集成了强大的 AI 辅助测试能力,帮助开发者高效编写、运行和维护测试。从自动生成测试用例到覆盖率分析,wescode 让测试工作更轻松。

自动测试生成

AI 生成测试

wescode 能根据源代码自动生成测试用例:

  1. 打开需要测试的源文件
  2. 在 Chat 面板中输入:为这个文件生成单元测试
  3. 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 在测试函数上方显示运行按钮:

通过命令面板运行

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 分析未覆盖的代码区域,建议补充测试的优先级:

TDD 工作流

红-绿-重构循环

wescode 支持 TDD(Test-Driven Development)工作流:

第一步:红(编写失败的测试)

在 Chat 中输入:
"我需要一个 CalculateDiscount 函数,接受价格和折扣率,返回折后价。先帮我写测试。"

AI 生成测试用例(此时编译不通过,状态为红色)

第二步:绿(编写最小实现)

在 Chat 中输入:
"现在帮我实现 CalculateDiscount,让测试通过。"

AI 生成最简实现,所有测试通过(状态为绿色)

第三步:重构(优化代码)

在 Chat 中输入:
"重构 CalculateDiscount,处理边界情况(负数价格、超过100%的折扣率)。"

AI 先补充边界测试,再修改实现

TDD 快捷工作流

wescode 提供 TDD 专用面板,支持:

AI 辅助测试

测试修复

当测试失败时,AI 可以帮助诊断和修复:

在 Chat 中输入:
"这个测试失败了,帮我分析原因并修复"

AI 会:
1. 分析测试失败的错误信息
2. 检查源代码是否有 Bug
3. 判断是测试写错了还是代码有问题
4. 提供修复建议

测试重构

AI 可以帮助改进现有测试:

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 会:

  1. 识别受影响的测试范围
  2. 建议需要运行的测试集合
  3. 检测是否需要新增回归测试
  4. 验证修改没有破坏现有功能

注意事项

相关文档