go测试的概念和方法

Go测试的概念和方法

一、核心概念
  1. 测试类型

    • 单元测试:验证单个函数或模块
    • 基准测试:测量代码性能
    • 示例测试:生成文档示例
    • 集成测试:验证多组件协作
  2. 测试文件规范

    • 文件名以_test.go结尾
    • 需导入testing
  3. 测试函数签名

    func TestXxx(*testing.T)    // 单元测试
    func BenchmarkXxx(*testing.B) // 基准测试
    func ExampleXxx()          // 示例测试
    

二、单元测试方法
  1. 基础测试

    func TestAdd(t *testing.T) {
        got := Add(2, 3)
        want := 5
        if got != want {
            t.Errorf("Add(2,3) = %d; want %d", got, want)
        }
    }
    

  2. 表驱动测试

    func TestMultiply(t *testing.T) {
        tests := []struct {
            a, b, want int
        }{
            {2, 3, 6},
            {0, 5, 0},
            {-1, 4, -4},
        }
        
        for _, tc := range tests {
            got := Multiply(tc.a, tc.b)
            if got != tc.want {
                t.Errorf("Multiply(%d,%d) = %d; want %d", 
                         tc.a, tc.b, got, tc.want)
            }
        }
    }
    

三、基准测试方法
func BenchmarkConcat(b *testing.B) {
    strs := []string{"a", "b", "c", "d", "e"}
    for i := 0; i < b.N; i++ {
        result := ""
        for _, s := range strs {
            result += s
        }
    }
}

运行命令:go test -bench=.

四、高级技巧
  1. 子测试

    func TestSplit(t *testing.T) {
        t.Run("empty_case", func(t *testing.T) {
            // 测试空字符串
        })
        t.Run("normal_case", func(t *testing.T) {
            // 正常场景
        })
    }
    

  2. 测试覆盖率
    运行命令:

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

  3. 测试初始化

    func TestMain(m *testing.M) {
        setup()  // 初始化操作
        code := m.Run() 
        teardown() // 清理操作
        os.Exit(code)
    }
    

五、示例测试
func ExampleReverse() {
    fmt.Println(Reverse("hello"))
    // Output: olleh
}

六、最佳实践
  1. 测试文件与被测文件同包
  2. 测试函数名使用Test+功能名
  3. 复杂逻辑优先使用表驱动测试
  4. 避免测试依赖外部服务(使用mock)
  5. 覆盖率目标建议80%以上

运行所有测试:go test ./...

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值