Test-Driven Development - Go (5)
go
golang
TDD
Test-Driven Development
上一篇講了 Dependency Injection
並且用 Database 當成範例來解釋
實際用起來會遇到另一個小問題
就是 DataStore 這一個 interface 會有太多的 function (真實的 db 會符合這一個 interface)
在 Mock 的時候 需要實做太多這一個 Test Case 不會用到的 function
個人的解決方法如下:
真實的 db 一樣是符合 DataStore 這一個 interface
但是單一個 function 的 Dependency Injection 用的是比較小的 interface
DataStore 這一個 interface 就只是各個小的 interface 的集合
type Datastore interface {
DatastoreCustomer
}
type DatastoreCustomer interface {
CheckUserNameCanUse(name string) bool
}
// 實際 function 的輸入是 function 比較少的 interface
func handlePostSignUp(db DatastoreCustomer) gin.HandlerFunc {
// do something
}
這樣就可以避免在寫測試的時候,需要 Mock 的物件去實作一堆 function 的問題
打完收工