购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

40.1 官方文档的“自相矛盾”

Go原生支持测试的两大要素——go test命令和testing包,它们是Gopher学习Go代码测试的必经之路。

下面是关于testing包的一段官方文档(Go 1.14版本)摘录:

要编写一个新的测试集(test suite),创建一个包含TestXxx函数的以_test.go为文件名结尾的文件。 将这个测试文件放在与被测试包相同的包下面 。编译被测试包时,该文件将被排除在外;执行go test时,该文件将被包含在内。

同样是官方文档,在介绍go test命令行工具时,Go文档则如是说:

那些包名中 带有_test后缀的测试文件 将被编译成一个独立的包,这个包之后会被链接到主测试二进制文件中并运行。

对比这两段官方文档,我们发现了一处“自相矛盾” 的地方:testing包文档告诉我们将测试代码放入 与被测试包同名的包中 ,而go test命令行帮助文档则提到会将 包名中带有_test后缀的测试文件 编译成一个独立的包。

我们用一个例子来直观说明一下这个“矛盾”:如果我们要测试的包为foo,testing包的帮助文档告诉我们把对foo包的测试代码 放在包名为foo的测试文件 中;而go test命令行帮助文档则告诉我们把foo包的测试代码 放在包名为foo_test的测试文件 中。

我们把将测试代码放在与被测包同名的包中的测试方法称为 “包内测试” 。可以通过下面的命令查看哪些测试源文件使用了包内测试:

$go list -f={{.TestGoFiles}} .

我们把将测试代码放在名为被测包包名+"_test"的包中的测试方法称为 “包外测试” 。可以通过下面的命令查看哪些测试源文件使用了包外测试:

$go list -f={{.XTestGoFiles}} .

那么我们究竟是选择 包内测试 还是 包外测试 呢?在给出结论之前,我们将分别对这两种方法做一个详细分析。 PIiTgrA51X+oXbIUn0PEWY1hVWLs22gTI9tyReF5Ke8IYsuI1amttaM/xVlbu9tl

点击中间区域
呼出菜单
上一章
目录
下一章
×