官术网_书友最值得收藏!

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包提供的相關函數輸出差異信息

主站蜘蛛池模板: 监利县| 丹巴县| 双鸭山市| 龙泉市| 安仁县| 柏乡县| 余干县| 武邑县| 通辽市| 黄浦区| 天津市| 神池县| 阿鲁科尔沁旗| 察隅县| 历史| 通州区| 阿尔山市| 二连浩特市| 东台市| 嘉兴市| 澎湖县| 贵南县| 庄浪县| 汨罗市| 安顺市| 盐边县| 密山市| 三原县| 凤台县| 军事| 菏泽市| 南木林县| 鄄城县| 丹棱县| 辽宁省| 平谷区| 集贤县| 理塘县| 六盘水市| 宣武区| 屏南县|