Test 的写法:
每一个test文件必须import 一个"testing"
test文件下的每一个test case均必须以Test开头并且符合TestXxx形式,否则go test会直接跳过测试不执行
eg: main_test.go
package main
import (
"fmt"
"testing"
)
func TestPrint(t *testing.T) {
res := Print1to20()
fmt.Println("hey")
if res != 210 {
t.Errorf("wrong result of Print1to20")
}
}
func TestPrint1(t *testing.T) {
fmt.Println("test")
}
main.go
package main
func Print1to20() int {
res := 0
for i := 0; i < 21; i++ {
res += i
}
return res
}
func main() {
Print1to20()
}
t.SkipNow()跳过当前case, 按PASS直接处理下一个case
Errorf打印错误信息时,整个test case会被跳过
test case的入参为t *testing.T或者b *testing.B
go 的test不会保证多个TestXxx是顺序执行,但是通常情况下会按照顺序执行
使用t.Run来执行subtest可以做到控制test 输出以及test的顺序执行
func TestPrint(t *testing.T){
t.Run("a1",func(t *testing.T){fmt.PrintLn("a1")}),
t.Run("a2",func(t *testing.T){fmt.PrintLn("a2")}),
}
TestMain: 初始化test,并且使用m.Run()来调用其他tests,可以完成一些需要初始化的testing, 如数据库连接,打开文件, REST服务登录等
是test case 入口
func TestMain(m *testing.M){
//此处初始化操作
fmt.PrintLn("test start")
m.Run()
}
如果没有在TestMain函数中调用m.Run.则不会执行TestMain以外的tests
package main
import (
"fmt"
"testing"
)
func testPrint(t *testing.T) {
res := Print1to20()
fmt.Println("hey")
if res != 210 {
t.Errorf("wrong result of Print1to20")
}
}
func testPrint1(t *testing.T) {
res := Print1to20()
res++
if res != 211 {
t.Errorf("wrong result of Print1to20")
}
}
func TestAll(t *testing.T) {
t.Run("testPrint", testPrint)
t.Run("testPrint1", testPrint1)
}
package main
import (
"fmt"
"testing"
)
func TestPrint(t *testing.T) {
res := Print1to20()
fmt.Println("hey")
if res != 210 {
t.Errorf("wrong result of Print1to20")
}
}
func TestPrint1(t *testing.T) {
res := Print1to20()
res++
if res != 211 {
t.Errorf("wrong result of Print1to20")
}
}
func TestMain(m *testing.M) {
fmt.Println("starting...")
m.Run()
}