iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 29
0
自我挑戰組

golang初探系列 第 29

day29- Testing

  • 分享至 

  • xImage
  •  

在 Golang 語言當中自帶一個輕量級的測試框架 testing 和有提供 go test 命令進行單元測試和性能測試
所有檔案名稱後綴為 _test.go 都是 go test 的測試的一部分
測試分三種類型

  • func 名稱前綴 Test,測試邏輯代碼行為是否正確(單元測試)
  • func 名稱前綴 Benchmark,測試函數性能
  • func 名稱前綴為 Example ,可謂文檔提供範例

main.go example

package main

func addUpper(n int) int {
	res := 0
	for i := 0; i <= n; i++ {
		res += i
	}
	return res
}

main_test.go example

使用 testing 進行assert

package main

import "testing"

func TestAddUpper(t *testing.T) {
	res := addUpper(10)
	if res != 55 {
		t.Fatalf("expect awsner is 55 but get %d", res)
	}
	t.Log("執行正確")
}

子測試 main_test.go

可以開起子測試來進行測試多筆數據

package main

import (
	"strconv"
	"testing"
)

func TestAddUpper(t *testing.T) {

	type testCase struct {
		n      int
		expect int
	}
	var c = []testCase{
		{
			n:      10,
			expect: 55,
		},
	}

	for k, tc := range c {

		t.Run(strconv.Itoa(k), func(t *testing.T) {
			res := addUpper(tc.n)
			if res != tc.expect {
				t.Fatalf("expect awsner is %d but get %d", tc.expect, res)
			}
		})

	}
}

測試覆蓋率

可以使用 go test -cover 來查看覆蓋率
https://ithelp.ithome.com.tw/upload/images/20200929/20129671zntVlkPLYl.png
額外提供一個 --coverprofile 參數 可將覆蓋率相關文件輸出成文件格式
go test -cover --coverprofile=cover.out
執行 go tool cover -html=cover.out
可以用 html 方式來呈現
https://ithelp.ithome.com.tw/upload/images/20200929/20129671Q2u0cH142W.png


上一篇
day28-Context介紹
下一篇
day30-Benchmarks 性能調優
系列文
golang初探30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言