go test
除了這兩天講的測試(testing)與壓力測試(Benchmark)以外,還包含了示例函數 Example。我們常常說測試就是最好的規格文件,具體描寫了程式應該做到哪些事情,而且隨時與即時的程式狀況相關聯,不會像文件一樣有更新不全的問題。
示例函數有幾個功能,第一就是上面說的,具體讓工程師了解函數應該如何運行,有助於快速瞭解專案;第二是扮演規格文件的功能;第三是讓提供一個程式真實演練的沙盒,確保程式執行結果如同我們的預期。延續前天的Division
案例,我們可以依此寫一個示例函數如下:
func ExampleDivision() {
i, _ := Division(6, 2)
fmt.Print(i)
// Output: 3
}
示例函數由Example
開頭,一樣放在測試檔案中由_test.go
結尾。最需要特別注意的地方在於,註解中的Output:
是固定格式,必須要存在才會執行,後面寫上預期會得到的結果,在這個例子中我們預期會得到3
。執行後我們可以得到下面的結果:
Running tool: /usr/local/bin/go test -timeout 30s -run ^ExampleDivision$
PASS
ok _/Users/Chenbater/projects/go/day20 0.005s
Success: Tests passed.
如果我們把註解的Output
刪去,會得到:
testing: warning: no tests to run
產出的結果可以不只一行,比方說:
func ExampleDivision() {
i, _ := Division(6, 2)
x, _ := Division(12, 3)
fmt.Println(i)
fmt.Println(x)
// Output:
// 3
// 4
}
只要依序可以得到預期的結果,一樣會通過。
經過了三天的各種測試教學,我們Division已經被滿滿的各種測試包覆,如果我們想知道測試覆蓋率,go也是有支援:
$ go test -cover
coverage: 100.0% of statements
他會把所有測試跑過一遍,然後加上測試覆蓋率的報告。我們的覆蓋達到百分之百,可喜可賀可喜可賀!