$GOPATH中项目目录下建立 main_test.go 文件(需要测试的文件默认以 XXX_test.go 命名)
main.go文件中有个函数
func Print1to20() int { res := 0 for i := 1; i <= 20; i++ { res += i } return res }
main_test.go中
package main import ( "fmt" "testing" ) func TestPrint(t *testing.T) {//函数名需写为TestXXX,T要大写,XXX首字母大写 res := Print1to20() fmt.Println("hey") if res != 210 { t.Errorf("Wrong")//t.Errorf打印错误信息
} }
cmd命令进入项目目录,执行 go test
执行go test -v
--------------------------------------------------------------------------------------------------
t.SkipNow()表示跳过当前测试函数,t.SkipNow()必须放在测试函数第一行
func TestPrint(t *testing.T) { t.SkipNow()//跳过TestPrint内容并继续下一个test,显示PASS res := Print1to20() fmt.Println("hey") if res != 210 { t.Errorf("Wrong") } }
--------------------------------------------------------------------------------------------------
如果要顺序执行各个test,则用到 t.Run(string, func)
func TestPrint(t *testing.T) { t.Run("a1",func(t *testing.T){ fmt.Println("a1") }) t.Run("a3",func(t *testing.T){ fmt.Println("a2") }) t.Run("a2",func(t *testing.T){ fmt.Println("a3") }) }
一般会这么测试
//函数名 Test 大写 func TestComments(t *testing.T) { t.Run("自命名1", testS1) t.Run("自命名1", testS1) t.Run("自命名1", testS1) } //函数名 test 小写 func testS1(t *testing.T) { ... } func testS2(t *testing.T) { ... } func testS3(t *testing.T) { ... }
--------------------------------------------------------------------------------------------------
如果要先执行某个test,则用 TestMain(m *testing.M) ,通常执行 文件打开 or 登录 or 数据库连接 等等
func TestMain(m *testing.M){ fmt.Println("test main first") m.Run()//不加 m.Run() 则不能进行后面的test }
--------------------------------------------------------------------------------------------------
【BenchMark】
把一个BenchMark重复很多次(不定,程序觉得跑到稳态了就算完,所以BenchMark里面最好是确定的执行时间,不然永远跑不到稳态,永远也跑不完),用来测试性能
func BenchmarkAll(b *testing.B){//函数名BenchmarkXXX,B大写,XXX首字母大写 for n := 0; n < b.N; n++ { Print1to20() } }
命令行执行 go test -bench=. (程序只会跑带BenchMark的部分)
一共跑了130842741次,每次耗时8.99纳秒