package main
import (
"testing"
)
func TestPrint(t *testing.T) {
res := Print1to20()
if res != 210 {
t.Errorf("Wrong result of Print1to20")
}
}
- 每一個(gè)test文件須import一個(gè)testing
- test文件下的每一個(gè)test case均必須以Test開(kāi)頭并且符合TestXXX形式, 否則go test會(huì)直接跳過(guò)測(cè)試不執(zhí)行
- test case的入?yún)閠 *testing.T 或b *testing.B
- t.Errorf為打印錯(cuò)誤信息,并且當(dāng)前test case 會(huì)被跳過(guò)
- t.SkipNow()為跳過(guò)當(dāng)前test耘子,并且直接按PASS處理繼續(xù)下一個(gè)test
- Go的test不會(huì)保證多個(gè)TestXXX是順序執(zhí)行, 但是通常會(huì)按照順序執(zhí)行
- 使用t.Run來(lái)執(zhí)行subtests可以做到控制test輸出以及test的順序
- 使用TestMain作為初始化test, 并且使用m.Run()來(lái)調(diào)用其他tests可以完成一些需要初始化操作的testing,比如數(shù)據(jù)庫(kù)連接, 文件打開(kāi)踩麦,REST服務(wù)登錄等
- 如果沒(méi)有在TestMain中調(diào)用m.Run()則除了TestMain以外的其他tests都不會(huì)被執(zhí)行
package main
import (
"fmt"
"testing"
)
func testPrint(t *testing.T) {
// 暫時(shí)跳過(guò)當(dāng)前測(cè)試
// 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) {
// 按順序執(zhí)行test
t.Run("test1", testPrint)
t.Run("test2", testPrint2)
}
func TestMain(m *testing.M) {
fmt.Println("Tests begins...")
// 注意: 如果不調(diào)用Run(), 其他test用例都不會(huì)執(zhí)行!
// m.Run()
}
// 測(cè)試中間步驟
// func testPrint(t *testing.T) {
// fmt.Println("test中間步驟")
// }