Go入门指南系列-XIII-VIII-测试的具体例子
在练习 9.4 中你写了一个叫 main_oddeven.go 的程序用来测试前 100 个整数是否是偶数。这个函数属于 even
包。
下面是一种可能的方案:
示例 13.7 even_main.go:
1 | package main |
上面使用了 even.go 中的 even
包:
示例 13.8 even/even.go:
1 | package even |
在 even
包的路径下,我们创建一个名为 oddeven_test.go 的测试程序:
示例 13.9 even/oddeven_test.go:
1 | package even |
由于测试需要具体的输入用例且不可能测试到所有的用例(非常像一个无穷的数),所以我们必须对要使用的测试用例思考再三。
至少应该包括:
- 正常的用例
- 反面的用例(错误的输入,如用负数或字母代替数字,没有输入等)
- 边界检查用例(如果参数的取值范围是 0 到 1000,检查 0 和 1000 的情况)
可以直接执行 go install 安装 even
或者创建一个 以下内容的 Makefile:
1 | include $(GOROOT)/src/Make.inc |
然后执行 make(或 gomake)命令来构建归档文件 even.a
测试代码不能在 GOFILES 参数中引用,因为我们不希望生成的程序中有测试代码。如果包含了测试代码,go test 会给出错误提示!go test 会生成一个单独的包含测试代码的 _test
程序。
现在我们可以用命令:go test
(或 make test
)来测试 even 包。
因为示例 13.5 中的测试函数不会调用 t.Log 和 t.Fail,所以会得到一个 PASS
的结果。在这个简单例子中一切都正常执行。
为了看到失败时的输出,把函数 TestEven()
改为:
1 | func TestEven(t *testing.T) { |
现在会调用 t.Log 和 t.Fail,得到的结果如下:
1 | --- FAIL: even.TestEven (0.00 seconds) |
练习 13.4:string_reverse_test.go
为练习 7.14 string_reverse.go 写一个单元测试。
把 string_reverse 放到自己的包 strev
中,只包含一个可导出函数 Reverse()
。
实现并测试它。
链接
- 目录
- 上一节:Go 中的单元测试和基准测试
- 下一节:用(测试数据)表驱动测试