Go:測試

1、go test

  1. 在包目錄內,所有以 _test.go爲後綴名的源文件並不是go build構建包的一部分,它們是go test測試的一部分。

  2. 三種測試函數

    • 測試函數是以Test爲函數名前綴的函數,用於測試程序的一些邏輯行爲是否正確;go test命令會調用 這些測試函數並報告測試結果是PASS或FAIL。
    • 基準測試函數是以Benchmark爲函數名前綴的函數,它們用於衡量一些函數的性能;go test命令會多次運行基準函數以計算一個平均的執行時間。
    • 示例函數是以Example爲函數名前綴的函數,提供一個由編譯器保證正確性的示例文檔。
  3. go test命令會遍歷所有的*_test.go文件中符合上述命名規則的函數,然後生成一個臨時的 main包用於調用相應的測試函數,然後構建並運行、報告測試結果,最後清理測試中生成的臨時文件

2、測試函數

  1. 測試函數的名字必須以Test開頭,可選的後綴名必須以大寫字母開頭,如下:
    	func TestName(t *testing.T) 
    	{
    	 	// ...
    	}
    
  2. t參數用於報告測試失敗和附加的日誌信息
  3. go test 命令如果沒有參數指定包那麼將默認採用當前目錄對應的包(和 go build 命令一 樣)。
  4. 測試失敗的信息一般的形式是“f(x) = y, want z”,其中f(x)解釋了失敗的操作和對應的輸出,y 是實際的運行結果,z是期望的正確的結果。
  5. mock函數的寫法,其實這邊直接在test函數裏面對函數進行修改就可以了,但是爲了保證運行之後其他保持函數本來的面目,這邊加上defer來保證測試類測試完成返回,函數不變,具體寫法:
    	func TestCheckQuotaNotifiesUser(t *testing.T) {
    		saved := fucToTest //先保存一下函數中要被Mock的某個方法 	
    		defer func() { fucToTest = saved }()  //測試類運行完以後要把函數還原回去
    		// Install the test's fake notifyUser. 
    		fucToTest = func(user, msg string) {		
    			 //重寫函數 .......
    		}
    		// ...rest of test... 
    	}	
    

3、測試覆蓋率

參考原文

4、基準測試

  1. 基準測試函數和普通測試 函數寫法類似,但是以Benchmark爲前綴名,並且帶有一個 *testing.B 類型的參 數;
  2. *testing.B 參數除了提供和 *testing.T 類似的方法,還有額外一些和性能測量相關的方法。它還提供了一個整數N,用於指定操作執行的循環次數。
  3. 我們需要通過 -bench 命令行標誌參數手工指定要運行的基準測試函數。該參數是一個正則表 達式,用於匹配要執行的基準測試函數的名字,默認值是空的。其中“.”模式將可以匹配所有 基準測試函數:
    	go test -bench=.
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章