iT邦幫忙

2021 iThome 鐵人賽

0
Software Development

網頁新手入門,手把手用React/Golang(Echo)開發基礎網頁(以簡易智慧家庭為例)系列 第 20

建立第一個單元測試(golang)-1(Day20)

當我們建立起最簡單的RESTful api後,接下來我們就要將測試也放到我們的程式中了
在golang中,他原本就有將測試的框架包進去他原生的函示庫了,在網路上也很很多不一樣的測試框架,而我接下來會實做的測試方式,主要是參考

gorm mock

這篇文章的實作方式,如果大家有什麼其他的說明,也可以在下面留言交流

首先,要先安裝測試需要的套件
測試框架
https://onsi.github.io/ginkgo/#getting-ginkgo

go get github.com/onsi/ginkgo/ginkgo
go get github.com/onsi/gomega/...

mock框架
https://github.com/golang/mock

go install github.com/golang/mock/mockgen@v1.6.0

gorm mock
https://github.com/DATA-DOG/go-sqlmock

go get github.com/DATA-DOG/go-sqlmock

在這邊補充說明一下mock的用途
在最簡單的測試中,你的程式中只會有input跟output
例如

func add(a int, b int) (output int) {
    return a + b
}

這樣在撰寫測試的時候就只要寫上

result := add(1,2)
Expect(result).To(Equal(3))

這樣即可,但如果有一天你的程式有依賴其他人
例如

import (
	"math/rand"
)

func isRandomEven() (output bool) {
	result := rand.Intn(86)
	return result%2 == 0
}

這時的測試就不能像上方這樣寫了,因為每次測試出來的結果都會不一樣
這時候就要將rand.Intn所產出的內容用一個我們可以控制的function來控制,而這個動作就叫做mock
原始程式

import (
	"math/rand"
)
var getRandom = rand.Intn
func isRandomEven() (output bool) {
	result := getRandom(86)
	return result%2 == 0
}

測試

getRandom = func (_ int) int {
    return 10
}
result := isRandomEven()
Expect(result).To(Equal(true))

下一篇我們就要將這些測試的內容放到我們的程式中了


上一篇
建立第一個RESTful api server(設定環境變數篇) (Day19)
下一篇
建立第一個單元測試(golang)-2(Day21)
系列文
網頁新手入門,手把手用React/Golang(Echo)開發基礎網頁(以簡易智慧家庭為例)21

尚未有邦友留言

立即登入留言