golang項目中Test的用法


一、文件名必須是xxx_test.go格式

滿足此格式時,運行go test命令,會自動去識別該文件,並執行。(也可以使用go test -v 查看詳細信息)

建議比如test的目標函數是main.go中的函數,則新建test文件名稱為main_test.go

二、test文件中必須import testing包

三、test文件下的每一個test case(函數)均必須以Test開頭並且符合TestXxx形式,負責go test會直接跳過不執行。

比如 main.go中需要測試的函數是Pringt123,那么test文件中的test 函數名則建議為 TestPrint123

四、test case的入參為 t *testing.T或者b *testing.B

五、t.Errorf為打印錯誤信息,並且當前test case會被跳過

六、t.SkipNow()為跳過當前test,並且會直接按Pass處理繼續下一個test。要生效時,必須寫在第一行。

main.go
func Print1to20() int { res := 0 for i := 0; i <= 20; i++{ res += i } return res }

main_test.go
func TestPrint1to20(t *testing.T) {
res := Print1to20()
fmt.Println("Hey")
if res != 210{
t.Errorf("Wrong result of Print1to20")
}
}

七、注意要點

一個test文件中有多個test case時,如何控制執行順序

1.使用t.Run來控制執行順序和輸出

func testPrint1to20(t *testing.T) {
	res := Print1to20()
	fmt.Println("Hey")
	if res != 210{
		t.Errorf("Wrong result of Print1to20")
	}
}

func testPrint2(t *testing.T) {
	res := Print1to20()
	fmt.Println("Hey2")
	res ++
	if res != 211{
		t.Errorf("Wrong result of Print2")
	}
}

#使用t.Run() func TestAll(t *testing.T) { t.Run("TestPrint1to20", testPrint1to20) t.Run("TestPrint2", testPrint2) }

  

2.使用TestMain作為初始化test,並且使用m.Run()來調用其他tests可以完成一些需要初始化操作的testing,比如數據庫連接,文件打開等;

如果沒有在TestMain()中調用m.Run()則除了TestMain()以外其他的tests都不會被執行 

func TestMain(m *testing.M)  {
	fmt.Println("tests begin")
	m.Run()
}

 

八、benchmark函數

benchmark函數一般以Benchmark開頭

benchmark的case一般會運行b.N次,每次執行都會如此

在執行過程中會根據實際case的執行時間是否穩定會增加b.N的次數以達到穩態

benchmark同樣受m.Run()方法控制

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM