golang的test使用起来也是比较方便简单的
要求:
①第一部当然是要导包了,少不了"testing"包
②test用例的函数名必须要以"TestXxx"的形式命名,否则golang会识别不出来直接跳过不测试
③test的传入参数必须为"t *testing.T"(测试功能测试函数)或"b *testing.B"(Benchmark——测试性能测试函数)
④t.Errorf为打印错误信息,并且当前的test case会被跳过
⑤t.SkipNow()为跳过当前的test,并把这个test按照pass处理然后去执行下一个test,不过这个t.SkipNow()要求必须写在函数体内的第一句
命令:一般常用"go test"或"go test -v"执行,后者会打印详细信息
例如:
//main.go
package main
func Abc() int {
sum := 0
for i := 1; i <= 100; i++ {
sum += i
}
return sum
}
//main_test.go
package main
import (
"fmt"
"testing"
)
func TestAbc(t *testing.T) {
res := Abc()
if res != 5050 {
t.Errorf("wrong result")
}
fmt.Println("ok")
}
当命令行键入"go test"
当命令行键入"go test -v",打印了更加详细的信息
上面的例子是以参数"t *testing.T"举例的,一般用来写功能测试函数,下面讲讲性能测试函数Benchmark。
①benchmark函数一般以Benchmark开头,而且参数要改成"b *testing.B"
②benchmark的test case一般会跑b.N次,而且每次执行都会跑这么多次,这个b.N并不是一个固定的次数,而是根据程序的复杂程度而调整
③要注意的是,benchmark在执行过程中会根据实际test case的执行时间是否稳定会增加b.N的次数以达到稳态
//main_test.go
package main
import (
//"fmt"
"testing"
)
func BenchmarkAll(b *testing.B) {
for i := 0; i < b.N; i++ {
TestAbc()
}
}
命令行键入"go test -bench=."
可以看到这个benchmark的执行,执行次数为5000000,平均每次执行时间为292ns