Go語言中的單元測試

go_9發表於2019-02-19

顧名思義,單元測試,就是一種為驗證單元的正確性而設定的自動化測試,一個單元就是程式中的一個模組化部分。

寫一段簡單的程式碼。

package main

func print1to20() int {
    var res int
    for i:=0;i<=20;i++ {
        res += i
    }
    return res
}

func main()  {
    //fmt.Println(Print1to20())
}

如果我們想要測試 print1to20 函式的正確性改怎麼辦?如果功能簡單直接在 main 函式中列印結果測試即可,如果功能複雜就要寫一個相關的單元測試了。

下面給出相關單元測試的程式碼

package main

import (
    "fmt"
    "testing"
)

//使用TestMain作為初始化test,並且使用m.Run()來呼叫其他的tests可以完成一些初始化操作的testing,比如資料庫的連線,檔案開啟,REST服務的登入等等..
//如果沒有呼叫m.Run()則除了TestMain以外的其他tests都不會被執行
func TestMain(m *testing.M) {
    fmt.Println("test main first")
    //初始化...
    //資料庫的連線,檔案開啟,REST服務的登入等等
    m.Run()
}

func testPrint(t *testing.T) {
    //t.SkipNow()  //立刻跳出這個測試
    res := print1to20()
    if res != 210 {
        t.Errorf("Wrong result of Print1To20") //立刻跳出這個測試
    }
}

func testPrint2(t *testing.T) {
    //t.SkipNow()  //立刻跳出這個測試
    res := print1to20()
    res++
    if res != 211 {
        t.Errorf("TestPrint2 result failed") //立刻跳出這個測試
    }
}

//Go的Test不會保證多個TestXxx是順序執行的,但通常是按照順序執行。
//使用t.Run來執行subtests可以做到控制test輸出以及test的順序
func TestAll(t *testing.T) {
    //先執行testPrint,後執行testPrint2
    t.Run("TestPrint", testPrint)
    t.Run("TestPrint2", testPrint2)
}

以上的測試函式的功能已經在註釋中寫清楚了,大家看一下注釋就能看的明白。在命令列裡面輸入 go test -v 就會進行測試。

更多原創文章乾貨分享,請關注公眾號
  • Go語言中的單元測試
  • 加微信實戰群請加微信(註明:實戰群):gocnio

相關文章