go test命令的那些事(我会持续更新的)

1. 命名规则
  • 可以通过以下命令查看go test命令的帮助文档:
$ go help  test 
  • 执行 go test 命令,它会在 *_test.go 中寻找 test 测试、benchmark 基准 和 examples 示例 函数。
  1. 测试函数必须以 TestXXX 的函数名出现(XXX 为以非小写字母开头)
  2. 基准函数必须以 BenchmarkXXX 的函数名出现
  3. 示例函数必须以 ExampleXXX 的形式。
  • 具体的规则可以通过以下命令,进行具体查看:
$ go help  testfunc
2. 两种模式
  • go test命令有两种模式:本地目录模式包列表模式
  • 本地目录模式:
  1. go test命令没有任何package参数时,例如go testgo test -v
  2. go test命令会编译在当前目录下找到的*_test.go文件,然后运行test的二进制文件。
  3. 最后,会打印test的结果(ok或者FAIL)、包名、运行时间。
ok   archive/tar   0.011s
FAIL archive/zip   0.022s
  • 包列表模式:
  1. 需要为go test命令明确指定package参数,例如go test mathgo test ./....(运行当前目录下所有的package)等。
  2. 运行过程与本地目录模式一致。
  3. 如果只是包列表模式系统会自动缓存成功的package测试结果,下次执行时会自动重放以前的输出,而不是重新执行test的二进制文件。这时,运行时间会被(cached)取代。
    在这里插入图片描述
3. 缓存的关闭
  • 以下参数都是可以进行缓存的:
  • -cpu
  • -list
  • -parallel
  • -run
  • -short
  • -v
  • 最开始的时候我就因为go test命令执行的是缓存结果,天真的以为自己的test通过了。
  • 后来被小伙伴告知有错误,自己都傻眼了,明明是ok啊 😂
  • 可以通过使用-count=1关闭缓存,可以发现两次的运行时间发生了变化。
    在这里插入图片描述
4. 添加打印输出
  • 在撰写Test函数时,我明明写了fmt.Printf("Create contract %d on channel %s ...\n", m, channel)这样的话,帮助我判断test的执行情况啊。
  • 一旦告诉我FAIL我去哪里找原因啊。。。
  • 后来,通过查阅资料,发现有一个-v参数,可以打印具体的信息。
    在这里插入图片描述
  • 加上-v参数以后,成功打印信息。
    在这里插入图片描述
5. go test并发执行多个package
  • 自己撰写了很多package分别用于测试不同的情况,单独测试每个package完全没压力啊,轻松过。
  • 一旦通过他们的上级目录,执行go test命令,就乱套了。各种错误,啥子明明路径对的,结果说文件找不到;明明自己进行了相对路径改绝对路径的,咋个说没改呢???
$ go test -v -count=1 madledger/lucytest/...
  • 后来和清华小伙伴猜测了原因,go test命令可能并行执行了package,这其实也是我想的原因,不然咋个这么神奇的错误。
  • 为了撰写该博文,我发现go help testflag中,竟然有提示说go test命令会并行执行。都怪自己都是以使用为主,那个不会查哪个。。。。
    在这里插入图片描述
  • 解决办法: 小伙伴的学弟说,可以加上-p 1参数,让go test命令并行执行每个package。
$ go test -cover -count=1 -p 1 madledger/lucytest/...

在这里插入图片描述

6. cover参数
  • 我发现小伙伴写的命令中,有-cover参数,通过以下命令知道了该参数的作用,该命令还展示了go test其他很多参数。
$ go help testflag
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值