上QQ阅读APP看书,第一时间看更新
41.1 经典模式——平铺
Go从对外发布的那一天起就包含了go test命令,这个命令会执行_test.go中符合TestXxx命名规则的函数进而实现测试代码的执行。go test并没有对测试代码的组织提出任何约束条件。于是早期的测试代码采用了十分简单直接的组织方式——平铺。
下面是对Go 1.5版本标准库strings包执行测试后的结果:
# go test -v . === RUN TestCompare --- PASS: TestCompare (0.00s) === RUN TestCompareIdenticalString --- PASS: TestCompareIdenticalString (0.00s) === RUN TestCompareStrings --- PASS: TestCompareStrings (0.00s) === RUN TestReader --- PASS: TestReader (0.00s) ... === RUN TestEqualFold --- PASS: TestEqualFold (0.00s) === RUN TestCount --- PASS: TestCount (0.00s) ... PASS ok strings 0.457s
我们看到,以strings包的Compare函数为例,与之对应的测试函数有三个:TestCompare、TestCompareIdenticalString和TestCompareStrings。这些测试函数各自独立,测试函数之间没有层级关系,所有测试平铺在顶层。测试函数名称既用来区分测试,又用来关联测试。我们通过测试函数名的前缀才会知道,TestCompare、TestCompareIdenticalString和TestCompareStrings三个函数是针对strings包Compare函数的测试。
在go test命令中,我们还可以通过给命令行选项-run提供正则表达式来匹配并选择执行哪些测试函数。还以strings包为例,下面的命令仅执行测试函数名字中包含TestCompare前缀的测试:
# go test -run=TestCompare -v . === RUN TestCompare --- PASS: TestCompare (0.00s) === RUN TestCompareIdenticalString --- PASS: TestCompareIdenticalString (0.00s) === RUN TestCompareStrings --- PASS: TestCompareStrings (0.00s) PASS ok strings 0.088s
平铺模式的测试代码组织方式的优点是显而易见的。
- 简单:没有额外的抽象,上手容易。
- 独立:每个测试函数都是独立的,互不关联,避免相互干扰。