go语言的testing使用详解
一、注意细节
- 每一个包名使用 xxx_test.go命名
- 每一个测试用例使用 TestXxx命名
- 测试用例传参要用 t *testing.T 或者 t *testing.B
- t.Errorf 是打印错误信息,并且当前测试用例会被跳过
- t.SkipNow 跳过当前test,并且直接按pass处理下一个
- go test不会保证顺序执行,但是通常按照顺讯执行
- 使用t.Run来执行subtests可以做到控制test输出以及test的顺序 (使用t.Run()顺序执行)
- TestMain作为初始化test,并且使用m.Run来调用其他tests可以完成需要初始化的testing,比如连接数据库、文件打开rest服务等
- 如果没有TestMain函数,执行TestXxxx形式的任何函数,如果有只执行TestMain函数
- Benchmark用来性能测试的
二、测试用例
package main
//被测方法
func sayhello() string{
return "hello world"
}
package main
import (
"testing"//引入包
"fmt"
)
func testHelloWorld(t *testing.T) {
t.SkipNow()//跳过不执行此函数
res:=sayhello()//测试被测函数
fmt.Println("TestHelloWorld")
if res != "hello world"{
t.Errorf("错误")
}
}
func testHello(t *testing.T) {
res:=sayhello()
fmt.Println("TestHello")
if res != "hello world"{
t.Errorf("错误")
}
}
func TestAll(t *testing.T){
//按照顺序执行
t.Run("TestHello",testHello)
t.Run("TestHelloWorld",testHelloWorld)
}
//性能测试用例
func BenchmarkAll(b *testing.B){
for n := 0; n < b.N; n++ {
sayhello()
}
}
//初始话函数
func TestMain(m *testing.M){
fmt.Println("开始")
m.Run()
}