上QQ阅读APP看书,第一时间看更新
6.3.1 功能测试函数
功能测试函数是以Test为前缀命名的函数,其主要作用是检测程序逻辑正确性,运行go test后,结果会以PASS(通过)或FAIL(不通过)进行报告。下面来看一下具体的示例:
book/ch06/6.3/test/testTest.go
1. package testTest
2.
3. func fb1(n int) int {
4. if n == 0 {
5. return 0
6. }
7. if n == 1 {
8. return 1
9. }
10. return fb1(n-1) + fb1(n-2)
11. }
12.
13. func fb2(n int) int {
14. if n == 0 {
15. return 0
16. }
17. if n == 1 {
18. return 2
19. }
20. return fb2(n-1) + fb2(n-2)
21. }
这个文件的代码很简单,在testTest包内写了两个方法:一个是fb1,一个是fb2,两个函数都是要实现斐波那契数列,下面首先对斐波那契数列进行介绍:
f(0)=0 f(1)=1 f(n)=f(n-1)+f(n-2)(n≧2)
以上是斐波那契数列的定义,这里故意把fb2函数写错了,当n=1的时候返回2,但若不把fb2函数写错,应该返回1。接着来写测试代码,测试文件是以_test.go结尾的,下面来完成testTest_test.go文件:
book/ch06/6.3/test/testTest_test.go
1. package testTest
2.
3. import "testing"
4.
5. func TestFb1(t *testing.T) {
6. if fb1(0) != 0 {
7. t.Error(`fb1(0)!=0`)
8. }
9. if fb1(1) != 1 {
10. t.Error(`fb1(1)!=1`)
11. }
12. if fb1(2) != 1 {
13. t.Error(`fb1(2)!=1`)
14. }
15. if fb1(10) != 55 {
16. t.Error(`fb1(10)!=55`)
17. }
18. }
19.
20. func TestFb2(t *testing.T) {
21. if fb2(0) != 0 {
22. t.Error(`fb2(0)!=0`)
23. }
24. if fb2(1) != 1 {
25. t.Error(`fb2(1)!=1`)
26. }
27. if fb2(2) != 1 {
28. t.Error(`fb2(2)!=1`)
29. }
30. if fb2(10) != 55 {
31. t.Error(`fb2(10)!=55`)
32. }
33. }
功能测试主要测试结果是否符合预期,所以分别对fb1和fb2进行测试,测试函数名以Test开始,而且Test后面必须跟大写字母或数字。测试函数内部也非常简单,就是判断函数的执行结果与预期的是否一致,如果与预期结果不一致则调用t.Error函数发出错误信号。
注意
所有的测试文件都要引入testing包。
测试函数写好了,接着就可以执行go test命令查看测试结果了。
$ go test --- FAIL: TestFb2 (0.00s) testTest_test.go:25: fb2(1)!=1 testTest_test.go:28: fb2(2)!=1 testTest_test.go:31: fb2(10)!=55 FAIL FAIL command-line-arguments 0.009s
显然,本例代码有错误,具体的bug需要开发人员自己去跟踪,在真正的开发中可以结合IDE采用跟踪的方式查找。