测试辅助

wescode 为测试开发提供全方位的 AI 辅助,从测试用例生成到测试策略设计,帮助你构建可靠的测试体系。


测试生成

自动生成测试

选中函数或文件,AI 自动生成测试用例:

生成策略

AI 根据函数特征选择测试策略:

函数类型测试策略
纯计算函数输入/输出对照表
HTTP Handlerhttptest + 请求/响应验证
数据库操作testcontainers + 真实 DB
文件操作t.TempDir() + 临时文件
并发代码多 goroutine + sync.WaitGroup
时间依赖clock mock 注入

单元测试

Go 测试最佳实践

AI 生成符合 Go 惯例的测试:

// AI 生成的典型 Go 表驱动测试结构
func TestCalculateTotal(t *testing.T) {
    tests := []struct {
        name     string
        items    []Item
        discount float64
        want     float64
        wantErr  bool
    }{
        {
            name:     "正常计算",
            items:    []Item{{Price: 100, Qty: 2}},
            discount: 0.1,
            want:     180,
        },
        {
            name:     "空列表",
            items:    nil,
            want:     0,
        },
        {
            name:     "折扣超范围",
            items:    []Item{{Price: 100, Qty: 1}},
            discount: 1.5,
            wantErr:  true,
        },
    }
    for _, tt := range tests {
        t.Run(tt.name, func(t *testing.T) {
            got, err := CalculateTotal(tt.items, tt.discount)
            if (err != nil) != tt.wantErr {
                t.Fatalf("error = %v, wantErr %v", err, tt.wantErr)
            }
            if got != tt.want {
                t.Errorf("got %v, want %v", got, tt.want)
            }
        })
    }
}

Mock 生成

AI 可以辅助生成 Mock:


集成测试

API 集成测试

AI 生成完整的 API 集成测试:

数据库集成测试

使用真实数据库的测试:

测试隔离

AI 确保测试之间相互独立:


测试覆盖率

覆盖率分析

AI 分析覆盖率报告并建议补充:

示例提问:
"coverage.html 显示 auth 包只有 45% 覆盖率,帮我分析缺什么"

AI 会:
1. 识别未覆盖的分支
2. 分析哪些路径最重要
3. 按优先级生成缺失的测试
4. 标注可以跳过的 trivial 路径

有意义的覆盖率

AI 会区分有意义和无意义的覆盖:


TDD 辅助

红绿重构

AI 支持 TDD 工作流:

  1. 红(Red):根据需求先写失败的测试
  2. 绿(Green):写最少的代码让测试通过
  3. 重构(Refactor):改进实现保持测试绿色

测试先行

在 Chat 中描述需求,AI 会:


测试策略

测试金字塔

AI 帮助建立合理的测试层次:

         ╱╲
        ╱  ╲        E2E 测试(少量关键路径)
       ╱────╲
      ╱      ╲      集成测试(API、DB、外部服务)
     ╱────────╲
    ╱          ╲    单元测试(大量、快速、独立)
   ╱────────────╲

测试命名

AI 生成清晰的测试名称:

测试数据管理


QualityGate 集成

L0 自动验证

代码变更后自动运行:

L1 构建验证

L2 验证命令

AI 自动选择合适的验证命令:


特殊测试场景

并发测试

// AI 生成的并发安全测试
func TestCache_ConcurrentReadWrite(t *testing.T) {
    c := NewCache()
    var wg sync.WaitGroup
    for i := 0; i < 100; i++ {
        wg.Add(2)
        go func(key string) {
            defer wg.Done()
            c.Set(key, "value")
        }(fmt.Sprintf("key-%d", i))
        go func(key string) {
            defer wg.Done()
            c.Get(key)
        }(fmt.Sprintf("key-%d", i))
    }
    wg.Wait()
}

性能基准测试

func BenchmarkProcess(b *testing.B) {
    data := generateTestData(1000)
    b.ResetTimer()
    for i := 0; i < b.N; i++ {
        Process(data)
    }
}

模糊测试

func FuzzParseInput(f *testing.F) {
    f.Add("normal input")
    f.Add("")
    f.Add("特殊字符!@#
quot;) f.Fuzz(func(t *testing.T, input string) { _, err := ParseInput(input) if err != nil { // 错误是预期的,只要不 panic return } }) }

注意事项