iT邦幫忙

2021 iThome 鐵人賽

DAY 20
0
Modern Web

golang後端入門分享系列 第 20

Day20-Go測試(testing)

前言

許多程式語言在主程式寫好後,還需要對程式進行測試,這時就需要寫測試的檔案。在 Go 語言中,測試框架已經有內建套件(testing)了,不需要在選擇框架或是安裝後第三方套。

go test

今天寫好了程式後,如果你需要測試的檔案名稱為 stat.go,那麼需要新增一個檔案,這檔案名稱為檔案名後加上 _test,即為 stat_test.go。
我們先來看 stat.go:

package stat
 
func Mean(data []float64) (mean float64){
   var sum float64
    for _, v := range data{
       sum += v
       }
    mean = sum/float64(len(data))
   return 
}

這是在前幾天的文章出現過的例子,是在計算一串數據的平均值,接著我就是要對這個函式做個測試了。

先新增 stat_test.go 這個檔案,我們先來看程式碼:

package stat
 
import "testing"
 
func TestMean1(t *testing.T) {
   if Mean([]float64{1,2,3}) != 2{
       t.Error("fail")
   }
}
 
func TestMean2(t *testing.T) {
   if Mean([]float64{1,9,5}) != 5{
       t.Error("fail")
   }
}
 
func TestMean3(t *testing.T) {
   if Mean([]float64{6,7,10}) != 23.0/3.0{
       t.Error("fail")
   }
}

我們解釋一下上述程式碼,一開始,你需要載入套件 testing,接著你必須寫一個 function,並且可能在裡頭運算你要測試的函式,在看是否符合所想要的答案。

接著要在終端機運行下列指令:

$ go test -v -cover=true stat_test.go stat.go
=== RUN   TestMean1
--- PASS: TestMean1 (0.00s)
=== RUN   TestMean2
--- PASS: TestMean2 (0.00s)
=== RUN   TestMean3
--- PASS: TestMean3 (0.00s)
PASS
coverage: 100.0% of statements
ok      command-line-arguments  0.379s  coverage: 100.0% of statements

而為什麼要把測試分成三個函式來寫呢?

因為每個測試案例(Test Case)都應該是獨立的,每個測試函式都是一個測試案例,這樣比較能 check 是測試寫錯還是真的函式寫錯。

結語

今天介紹 Go 語言的測試如何去建構,用一個比較簡單的例子帶大家了解,當然隨著你的程式邏輯越來越複雜,測試也會越來越難寫,需要考慮更多細節,就有待你的經驗累積。希望今天的文章對你有幫助,感謝今天的閱讀!


上一篇
Day19-Go錯誤處理(下)
下一篇
Day21-Go檔案處理
系列文
golang後端入門分享30

尚未有邦友留言

立即登入留言