package main
import (
"testing"
)
func TestPrint(t *testing.T) {
res := Print1to20()
if res != 210 {
t.Errorf("Wrong result of Print1to20")
}
}
- 每一个test文件须import一个testing
- test文件下的每一个test case均必须以Test开头并且符合TestXXX形式, 否则go test会直接跳过测试不执行
- test case的入参为t *testing.T 或b *testing.B
- t.Errorf为打印错误信息,并且当前test case 会被跳过
- t.SkipNow()为跳过当前test,并且直接按PASS处理继续下一个test
- Go的test不会保证多个TestXXX是顺序执行, 但是通常会按照顺序执行
- 使用t.Run来执行subtests可以做到控制test输出以及test的顺序
- 使用TestMain作为初始化test, 并且使用m.Run()来调用其他tests可以完成一些需要初始化操作的testing,比如数据库连接, 文件打开,REST服务登录等
- 如果没有在TestMain中调用m.Run()则除了TestMain以外的其他tests都不会被执行
package main
import (
"fmt"
"testing"
)
func testPrint(t *testing.T) {
// 暂时跳过当前测试
// t.SkipNow()
res := Print1to20()
// testPrint(t)
fmt.Println("hey")
if res != 210 {
t.Errorf("Wrong result of Print1to20")
}
}
func testPrint2(t *testing.T) {
res := Print1to20()
res++
if res != 211 {
t.Errorf("Test Print2 Failed")
}
}
func TestAll(t *testing.T) {
// 按顺序执行test
t.Run("test1", testPrint)
t.Run("test2", testPrint2)
}
func TestMain(m *testing.M) {
fmt.Println("Tests begins...")
// 注意: 如果不调用Run(), 其他test用例都不会执行!
// m.Run()
}
// 测试中间步骤
// func testPrint(t *testing.T) {
// fmt.Println("test中间步骤")
// }
网友评论