- Go語言精進之路:從新手到高手的編程思想、方法和技巧(2)
- 白明
- 500字
- 2022-01-04 17:42:20
42.1 Go測試代碼的一般邏輯
眾所周知,Go的測試函數就是一個普通的Go函數,Go僅對測試函數的函數名和函數原型有特定要求,對在測試函數TestXxx或其子測試函數(subtest)中如何編寫測試邏輯并沒有顯式的約束。對測試失敗與否的判斷在于測試代碼邏輯是否進入了包含Error/Errorf、Fatal/Fatalf等方法調用的代碼分支。一旦進入這些分支,即代表該測試失敗。不同的是Error/Errorf并不會立刻終止當前goroutine的執行,還會繼續執行該goroutine后續的測試,而Fatal/Fatalf則會立刻停止當前goroutine的測試執行。
下面的測試代碼示例改編自$GOROOT/src/strings/compare_test.go:
// chapter8/sources/non_table_driven_strings_test.go func TestCompare(t *testing.T) { var a, b string var i int a, b = "", "" i = 0 cmp := strings.Compare(a, b) if cmp != i { t.Errorf(`want %v, but Compare(%q, %q) = %v`, i, a, b, cmp) } a, b = "a", "" i = 1 cmp = strings.Compare(a, b) if cmp != i { t.Errorf(`want %v, but Compare(%q, %q) = %v`, i, a, b, cmp) } a, b = "", "a" i = -1 cmp = strings.Compare(a, b) if cmp != i { t.Errorf(`want %v, but Compare(%q, %q) = %v`, i, a, b, cmp) } }
上述示例中的測試函數TestCompare中使用了三組預置的測試數據對目標函數strings.Compare進行測試。每次的測試邏輯都比較簡單:為被測函數/方法傳入預置的測試數據,然后判斷被測函數/方法的返回結果是否與預期一致,如果不一致,則測試代碼邏輯進入帶有testing.Errorf的分支。由此可以得出Go測試代碼的一般邏輯,那就是針對給定的輸入數據,比較被測函數/方法返回的實際結果值與預期值,如有差異,則通過testing包提供的相關函數輸出差異信息。
推薦閱讀
- 計算思維與算法入門
- PWA入門與實踐
- INSTANT CakePHP Starter
- Java Web基礎與實例教程
- 微信小程序開發解析
- PHP 7+MySQL 8動態網站開發從入門到精通(視頻教學版)
- The DevOps 2.5 Toolkit
- Visual Foxpro 9.0數據庫程序設計教程
- Python+Tableau數據可視化之美
- Web App Testing Using Knockout.JS
- Java并發編程之美
- Programming Microsoft Dynamics? NAV 2015
- Python自然語言理解:自然語言理解系統開發與應用實戰
- Mastering HTML5 Forms
- 超簡單:用Python讓Excel飛起來(實戰150例)