go测试的概念和方法

Go测试的概念和方法

概念
  1. 测试驱动开发(TDD)
    在编写功能代码前先编写测试用例,通过测试驱动代码设计。

  2. 测试金字塔
    Go推荐分层测试策略:

    • 单元测试(占比最大)
    • 集成测试
    • 端到端测试(占比最小)
  3. 测试覆盖率
    通过go test -cover计算代码被测试覆盖的比例: $$ \text{覆盖率} = \frac{\text{已执行代码行数}}{\text{总代码行数}} \times 100% $$

核心方法
  1. 单元测试

    • 文件命名:xxx_test.go
    • 函数格式:func TestXxx(*testing.T)
    func TestAdd(t *testing.T) {
        result := Add(2, 3)
        if result != 5 {
            t.Errorf("预期5, 得到%d", result)
        }
    }
    

  2. 表格驱动测试

    func TestMultiply(t *testing.T) {
        tests := []struct{
            a, b, expected int
        }{
            {2, 3, 6},
            {-1, 5, -5},
            {0, 100, 0},
        }
    
        for _, tt := range tests {
            result := Multiply(tt.a, tt.b)
            if result != tt.expected {
                t.Errorf("%d * %d: 预期%d, 得到%d", 
                         tt.a, tt.b, tt.expected, result)
            }
        }
    }
    

  3. 基准测试

    • 函数格式:func BenchmarkXxx(*testing.B)
    • 使用b.N控制迭代次数
    func BenchmarkConcat(b *testing.B) {
        for i := 0; i < b.N; i++ {
            Concat("a", "b")
        }
    }
    

  4. 子测试

    func TestParse(t *testing.T) {
        t.Run("整数解析", func(t *testing.T){
            // 测试逻辑
        })
        t.Run("浮点数解析", func(t *testing.T){
            // 测试逻辑
        })
    }
    

测试工具链
  1. 运行测试

    go test ./...      # 运行所有测试
    go test -v         # 显示详细输出
    go test -run TestX # 运行特定测试
    

  2. 覆盖率分析

    go test -coverprofile=coverage.out
    go tool cover -html=coverage.out
    

  3. 竞态检测

    go test -race
    

最佳实践
  1. 使用t.Helper()标记辅助函数
  2. 避免测试依赖外部服务(使用mock)
  3. 测试边界条件:零值、负值、最大值等
  4. 保持测试代码与生产代码同等质量

通过testing包和标准工具链,Go实现了轻量但强大的测试生态,支持从单元测试到性能分析的完整生命周期。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值