Go单元测试

Go单元测试,第1张

概述Go单元测试 简介 单元测试是go语言级别提供的完整功能,测试代码以*_test.go命名,单元测试的case以Test开头,性能测试case以Benchmark开头,运行测试命令:go test <test_file_list> 例子 实现排列组合函数以及对应的单元测试和性能测试 创建工程目录结构 目录结构说明参见规范-项目 └── src └── hmath ├── h Go单元测试 简介

单元测试是go语言级别提供的完整功能,测试代码以*_test.go命名,单元测试的case以Test开头,性能测试case以Benchmark开头,运行测试命令:go test <test_file_List>

例子

实现排列组合函数以及对应的单元测试和性能测试

创建工程目录结构

目录结构说明参见规范-项目

└── src    └── hmath        ├── hmath.go        └── hmath_test.go
实现排列组合函数
// src/hmath/hmath.gopackage hmathfunc combination(m,n int) int {    if n > m-n {        n = m - n    }    c := 1    for i := 0; i < n; i++ {        c *= m - i        c /= i + 1    }    return c}
实现单元测试和性能测试
// src/hmath/hmath_test.gopackage hmathimport (    "math/rand"    "testing")// 单元测试// 测试全局函数,以TestFunction命名// 测试类成员函数,以TestClass_Function命名func TestCombination(t *testing.T) {    // 这里定义一个临时的结构体来存储测试case的参数以及期望的返回值    for _,unit := range []struct {        m        int        n        int        expected int    }{        {1,1},{4,1,4},2,6},3,4,{10,10},120},7,} {        // 调用排列组合函数,与期望的结果比对,如果不一致输出错误        if actually := combination(unit.m,unit.n); actually != unit.expected {            t.Errorf("combination: [%v],actually: [%v]",unit,actually)        }    }}// 性能测试func BenchmarkCombination(b *testing.B) {    // b.N会根据函数的运行时间取一个合适的值    for i := 0; i < b.N; i++ {        combination(i+1,rand.Intn(i+1))    }}// 并发测试func BenchmarkCombinationParallel(b *testing.B) {    // 测试一个对象或者函数在多线程的场景下面是否安全    b.RunParallel(func(pb *testing.PB) {        for pb.Next() {            m := rand.Intn(100) + 1            n := rand.Intn(m)            combination(m,n)        }    })}
运行单元测试和性能测试
export GOPATH=$(pwd)go test src/hmath/*.go           # 单元测试go test --cover src/hmath/*.go   # 单元测试覆盖率go test -bench=. src/hmath/*.go  # 性能测试

上面命令的输出如下:

hatlonely@localhost: ~/hatlonely/github/tmp $ go test src/hmath/hmath*.gook      command-line-arguments  0.005shatlonely@localhost: ~/hatlonely/github/tmp $ go test --cover src/hmath/hmath*.gook      command-line-arguments  0.005s  coverage: 100.0% of statementshatlonely@localhost: ~/hatlonely/github/tmp $ go test -bench=. src/hmath/*.goBenchmarkCombination-8                100000        217618 ns/opBenchmarkCombinationParallel-8       3000000           401 ns/opPASSok      command-line-arguments  23.599s
总结

以上是内存溢出为你收集整理的Go单元测试全部内容,希望文章能够帮你解决Go单元测试所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1277072.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存