表驅動單元測試

這種型別的測試是用於使用預定義輸入和輸出值進行測試的常用技術。

使用內容建立名為 main.go 的檔案:

package main

import (
    "fmt"
)

func main() {
    fmt.Println(Sum(4, 5))
}

func Sum(a, b int) int {
    return a + b
}

執行後,你將看到輸出為 9。雖然 Sum 函式看起來很簡單,但測試程式碼是個好主意。為此,我們在與 main.go 相同的資料夾中建立另一個名為 main_test.go 的檔案,其中包含以下程式碼:

package main

import (
    "testing"
)

// Test methods start with Test
func TestSum(t *testing.T) {
    // Note that the data variable is of type array of anonymous struct,
    // which is very handy for writing table-driven unit tests.
    data := []struct {
        a, b, res int
    }{
        {1, 2, 3},
        {0, 0, 0},
        {1, -1, 0},
        {2, 3, 5},
        {1000, 234, 1234},
    }

    for _, d := range data {
        if got := Sum(d.a, d.b); got != d.res {
            t.Errorf("Sum(%d, %d) == %d, want %d", d.a, d.b, got, d.res)
        }
    }
}

如你所見,建立了一片匿名結構,每個結構都有一組輸入和預期結果。這允許在一個地方一起建立大量測試用例,然後在迴圈中執行,減少程式碼重複並提高清晰度。