Halo

A magic place for coding

0%

浅谈 Golang 单元测试

Introduction

  Golang 给开发者提供了一个很成熟的单元测试框架,我们可以直接使用 go test 来执行测试。但是在单元测试中还有需要细节要考虑的,比如哪些文件会运行?测试的范围是什么?这些测试是串行运行还是并行运行等,这些都是我们实际应用时要考虑的问题。


测试范围及文件类型

   我们在运行 go test 命令后,哪些测试文件会被执行,他的范围又是什么?

   首先在某个文件夹下执行了 go test 命令后,这个命令会在 ** 当前的 package** 中寻找符合 *_test.go 的文件,并在这些文件中找到 TestXxx (*testing.T){}BenchmarkXxx (b *testing.B) {}ExampleXxx () {} 这些函数执行测试用例。

   如果想要执行当前 package 下所有的测试用例,可以使用命令 go test ./...,这样就会搜索当前目录及子目录下所有符合要求的测试文件。

串行还是并行

   在测试过程中测试用例的执行串行还是并行很重要吗?当然,这直接影响着测试的结果。试想一下如果测试的时候需要连接到测试的本地数据库,A 用例需要创建一条记录,而 B 用例则需要删除一条记录,如果是并行的话就会有意想不到的效果。这会导致每次测试的结果可能都不同,无法有效地测试代码的正确性。

   默认情况下,在不同的 package 之间的测试是并行的,在 package 内部是串行的。但是如果在 package 内部需要串行执行的话,就需要显式执行 t.Parallel () 或者在运行命令是带上参数 go test -parallel 1 -p 1。第一个参数 -parallel 设定的是并行测试函数的数目,对应的是 package 内部的测试,默认值是 GOMAXPROCS;第二个参数 -p 设定的是并行测试的 test binary 数目,对应的是 package 之间的测试,默认值是 CPU 的核数。


小结

   这里简单分享一些有关 Go 单元测试的小知识,后续遇到了相关的问题会继续在这里分享。


Reference

  1. [Golang 测试](

Welcome to my other publishing channels