软件开发离不开软件测试,测试是程序质量的有力保障,也是程序开发者的有力辅助工具。当我们添加或者更新了新的功能是,通过测试单元我们能清楚的了解到程序功能是否正常、性能是否提高等。
Go语言作为一门先进的现代计算机编程语言,为程序测试提供了很多开箱即用的工具。Go语言在标准准库中提供了一个专门用于测试的代码包testing。这个代码包提供了编写代码测试源码文件的一切。使用go test命令便可执行测试源码文件的测试程序。
一功能测试
测试员吗文件总应该与被它测试的源码文件厨艺同一个代码包内。我们在编写测试源码文件总是会用到标准库代码包testing的API。testing包维Go语言的代码包提供自动化测试支持。它与go test命令协同使用自动执行目标代码包中的任何测试函数。
1.1编写测试函数
在测试源码文件中,针对测试目标源码文件的功能测试总是以函数为单位。被用于测试的函数的名称和签名形如:
func TestXxx(t *testing.T)
通常把Xxx替换成被测试的函数名称。我们可以利用*testing.T类型的参数t上的一些方法对功能测试的过程进行记录和控制。
- 常规记录
参数 t 上的Log和Logf方法一般用于记录一些常规信息,以展示测试程序的运行过程以及被测试程序的实时状态。t.Log和t.Logf分别与fmt.Println和fmt.Printf函数的使用方法类似。 - 错误记录
参数t上的Error和ErrorF方法被用于错误记录。当被测试程序的状态不正确时,调用t.Error或者t.Errorf方法,及时记录当前的错误状态。调用t.Error相当于先后调用了t.Log和t.Fial方法,而调用t.Errorf则相当于先后调用了t.LogF和t.Fial方法。 - 致命错误记录
参数t上的Fatal和Fatalf方法被用于记录被测试程序的致命错误状态( 使得测序程序无法继续运行的错误 )。调用t.Fatal相当于先后调用了t.Log和t.FialNow方法,而调用t.Errorf则相当于先后调用了t.FatalF和t.FialNow方法。 - 失败标记
参数上的Fail方法被用于标记当前测试函数中的测试是失败的。对t.Fail方法的调用不会终止当前测试函数的执行。当时,此函数的测试结果已经被标记为失败了。 - 立即失败标记
方法t.FailNow用于标记当前测试函数的测试是失败的,并立即终止当前测试函数的执行。 - 失败判断
t.Failed方法用于获得当前测试函数中的测试是否已经被标记为失败。 - 忽略测试
调用t.SkipNow的方法用于标记当前测试函数为已经被忽略的并且立即终止该函数的执行。
1.2功能测试的额运行
Go语言提供了专门用于程序测试命令--
go test
命令。
执行go test
的三种方式:
-
go test testPackage
命令后面跟被测试代码包。 -
go test xxx_test.go xx.go
命令后面跟测试源码文件及其测试的源码文件,用于执行代码包中的部分测试。 -
go test -run=Regxp testPackage
使用标记-run ,-run标记的值为一个正则表达式,与正则表达式匹配的功能测函数,才会在此次的测试过程中被执行。