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 关注
- 173 浏览
添加回答
举报