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