$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纳秒
浙公网安备 33010602011771号