Go微服务实战
上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采用跟踪的方式查找。