go testing 包的介绍和使用

栏目: 编程工具 · 发布时间: 5年前

内容简介:golang 标准库 testing 包为 Go 代码支持了自动化测试。使用函数测试定义:这个 TestXxx 函数式放在一个文件尾部名 _test.go 中。

golang 标准库 testing 包为 Go 代码支持了自动化测试。使用 go test 命令来执行。

介绍

函数测试定义:

func TestXxx(*testing.T)

这个 TestXxx 函数式放在一个文件尾部名 _test.go 中。

一个简单的测试:

func TestAbs(t *testing.T) {
    got := Abs(-1)
    if got != 1 {
        t.Errorf("Abs(-1) = %d; want 1", got)
    }
}

Benchmarks

函数定义:

func BenchmarkXxx(*testing.B)

测试基准通过 go test -bench 来执行。

  • -cover 命令行参数,显示覆盖率信息

一个简单的基准测试:

func BenchmarkHello(b *testing.B) {
    for i := 0; i < b.N; i++ {
        fmt.Sprintf("hello")
    }
}

BenchmarkHello    10000000    282 ns/op

基准函数通过执行 b.N 次。例如上面 10000000 次每个执行时间在 282 ns。

Subtests and Sub-benchmarks(子测试与子基准)

这种子测试可以实现表驱动基准测试和创建分层测试。也可以提供通用的 setup 和 teardown 方法。

func TestFoo(t *testing.T) {
    // <setup code>
    t.Run("A=1", func(t *testing.T) { ... })
    t.Run("A=2", func(t *testing.T) { ... })
    t.Run("B=1", func(t *testing.T) { ... })
    // <tear-down code>
}

Main

有时测试必须为测试代码添加额外的 setup 和 teardown 在测试之前和之后。也有时必须控制那些代码在主线程执行,去支持其他情况。代码定义:

func TestMain(m *testing.M)

当执行测试时会调用 TestMain,而不是直接运行测试。这时可以在 m.Run 的前后调用 setup 和 teardown 方法。

func TestMain(m *testing.M) {
    // call flag.Parse() here if TestMain uses flags
  // setup
    code := m.Run()
  // teardown
    os.Exit(code)
}

常用的测试方法

Error(args ...interface{})
Log(args ...interface{})
Parallel()
Fatal(args ...interface{})
Skip(args ...interface{})

testdata

testdata 测试文件夹下可以存放一些测试需要用到的测试数据、静态文件。

表驱动测试(Table-driven test)

表测试是通过构建数据表来运行测试的一种方法。可以结合 subtest 来覆盖各种测试情况。

func TestOrderSrv_OrderSendToPay(t *testing.T) {
    room := Room{}
    db.First(&room)
    order := test_createOrder(t, room)

    type args struct {
        order *models.Order
    }
    tests := []struct {
        name    string
        args    args
        wantErr bool
    }{
        {
            name: "提交订单",
            args: args{
                order: order,
            },
            wantErr: false,
        },
    }
    for _, tt := range tests {
        t.Run(tt.name, func(t *testing.T) {
            s := &OrderSrv{}
            if err := s.OrderSendToPay(tt.args.order); (err != nil) != tt.wantErr {
                t.Errorf("OrderSrv.OrderSendToPay() error = %v, wantErr %v", err, tt.wantErr)
            }
        })
    }
}

建议使用 vscode 或 golandIDE 的 Go 插件支持生成测试用例模板。

Ref


以上所述就是小编给大家介绍的《go testing 包的介绍和使用》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

程序员第二步

程序员第二步

尹华山 / 人民邮电出版社 / 2013-11 / 45.00元

这本书是写给程序员和项目经理的。作者结合自身的丰富成长历程,通俗易懂地讲述了一名程序员如何才能成为一名优秀的项目经理。内容涉及职业规划、学习方法、自我修炼、团队建设、项目管理等,书中理清了项目管理领域中典型的误区及具有迷惑性的观点,并对项目中的难点问题提出了针对性的解决方法。 全书行文流畅,严谨中带着活泼,理智中透着情感,给读者带来轻松愉快的阅读感受。书中诸多富有创见的观点,让人耳目一新,引......一起来看看 《程序员第二步》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具