go test, go bench & go examples

链接

https://pkg.go.dev/testing

go test

运行TestXXX函数,go源码中的例子:https://github.com/golang/go/blob/go1.17/src/strings/strings_test.go

包名:xxx_test
在这里插入图片描述

go test -run name

go test -run namego test -bench namename参数是一个正则表达式,除非使用^...$,否则它们将执行部分匹配。

例子:

go test -run ''      # 空参数,运行所有测试用例
go test -run Foo     # 执行顶层测试函数,如"TestFooBar".
go test -run TestFoo   # 执行顶层测试函数,如"TestFooBar", Test前缀可被自动跳过
go test -run Foo/A=    # 执行顶层测试函数定义的的子测试逻辑,如"TestFooBar"中定义的名为"A"的子测试
go test -run /A=1    # 执行所有名为"A=1"的子测试

benchmark: go test -v -run NONE -bench BenchmarkFib10

// from fib_test.go
func BenchmarkFib10(b *testing.B) {
        // run the Fib function b.N times
        for n := 0; n < b.N; n++ {
                Fib(10)
        }
}

构建testbinary

go test -c -o path/to/testdir/testbin  path/to/testdir/*.go &&\
path/to/testdir/testbin -v -run TestMethod

-c 编译
-o FILE 输出文件
-args [program args verbatim]

t.Skip("...")

测试用例可根据运行时参数动态跳过:

func TestTimeConsuming(t *testing.T) {
    if testing.Short() {
        t.Skip("skipping test in short mode.")
    }
    ...
}

读取testdata

参考:https://github.com/golang/go/blob/go1.17/src/archive/tar/reader_test.go#L688

测试用例执行时的工作目录是用例所在的目录,因此可以使用os.Open(....)直接读取相对路径的文件。
在这里插入图片描述

// file: go/src/archieve/tar/reader_test.go

func TestPartialRead(t *testing.T) {
	f, err := os.Open("testdata/gnu.tar")
	if err != nil {
		t.Fatalf("Open() error: %v", err)
	}
	defer f.Close()
	// do something on f		
}

TestMain

如果存在TestMain函数,则go test忽略其他TestXXXBenchXXX函数,直接运行TestMain.

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

TestMain将会在主线程中执行,因此便于执行一些setupteardown
m.Run()执行所有的测试用例,然后返回exitCode

注:一般情况下不需要使用TestMain

example

xx_test.go文件中的以ExampleXXX()开头的函数,例子:https://github.com/golang/go/blob/go1.17/src/strings/example_test.go

在这里插入图片描述

命名惯例:

func Example() { ... }   // 针对包
func ExampleF() { ... }  // 针对函数F
func ExampleT() { ... }  // 针对类型T
func ExampleT_M() { ... }  // 针对类型T的方法M

在运行测试用例时,方法体中有Output: 或者Unordered Output: 注释的方法,将会被执行,且输出会被与注释进行对比。
对比时,开头和结尾的空白字符将被忽略。

example文件命名一般为example_test.go,如果有其他额外的example,则加上一些前缀即可。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值