iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 22
1
Software Development

啥物碗Golang? 30天就Go系列 第 22

Example 示例函數

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
}

只要依序可以得到預期的結果,一樣會通過。

Cover 測試覆蓋率

經過了三天的各種測試教學,我們Division已經被滿滿的各種測試包覆,如果我們想知道測試覆蓋率,go也是有支援:

$ go test -cover
coverage: 100.0% of statements

他會把所有測試跑過一遍,然後加上測試覆蓋率的報告。我們的覆蓋達到百分之百,可喜可賀可喜可賀!

Refernece


上一篇
Benchmarks 壓力測試
下一篇
Channels 通道
系列文
啥物碗Golang? 30天就Go30

尚未有邦友留言

立即登入留言