2 回答

TA貢獻1860條經驗 獲得超9個贊
我會讓調用 NewUserController() 和 NewUserModel() 的代碼決定是創建模擬還是真實實現。如果您一直使用這種依賴注入模式直到頂部,您的代碼將變得更清晰,耦合度也會降低。例如,如果用戶控制器被服務器使用,它看起來像這樣:
真實:
u := NewUserController() s := NewServer(u)
在測試中:
u := NewMockUserController() s := NewServer(u)

TA貢獻2016條經驗 獲得超9個贊
我會嘗試一個更纖薄的變體,分布在模型和控制器包上,如下所示:
// inside package controllers
type UserModel interface {
Get() // the methods you need from the user model
}
type User struct {
UserModel
}
// inside package models
type User struct {
// here the User Model
}
// inside package main
import ".....controllers"
import ".....models"
func main() {
c := &controllers.User{&models.User{}}
}
// inside main_test.go
import ".....controllers"
type MockUser struct {
}
func TestX(t *testing.T) {
c := &controllers.User{&MockUser{}}
}
對于控制器測試,請考慮httptest 包的ResponseRecorder
- 2 回答
- 0 關注
- 208 瀏覽
添加回答
舉報