當我們建立起最簡單的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))
下一篇我們就要將這些測試的內容放到我們的程式中了