Skip to main content

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

當我們建立起最簡單的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/[email protected]

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))

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