所以我想在测试中将控制器与模型隔离开来,以便在出现问题时能够轻松找出问题。之前,我只是用模拟数据命中端点,但难以排除故障,因为测试从路由器一直运行到数据存储。所以我想也许我会为每个控制器(和模型)创建两个版本(MockController vs Controller),并根据模式变量的值使用一个版本。简而言之,这是我计划实施它的方式。如何在测试中将模型与控制器分开?
const mode string = "test"
// UserModelInterface is the Interface for UserModel
type UserModelInterface interface {
Get()
}
// UserControllerInterface is the Interface for UserController
type UserControllerInterface interface {
Login()
}
// NewUserModel returns a new instance of user model
func NewUserModel() UserModelInterface {
if mode == "test" {
return &MockUserModel{}
} else {
return &UserModel{}
}
}
// NewUserController returns a new instance of user controller
func NewUserController(um UserModelInterface) UserControllerInterface {
if mode == "test" {
return &MockUserController{}
} else {
return &UserController{}
}
}
type (
UserController struct {um UserModelInterface}
UserModel struct {}
// Mocks
MockUserController struct {um UserModelInterface}
MockUserModel struct {}
)
func (uc *UserController) Login() {}
func (um *UserModel) Get() {}
func (uc *MockUserController) Login() {}
func (um *MockUserModel) Get() {}
func main() {
um := NewUserModel()
uc := NewUserController(um)
}
这样我可以只跳过了MockUserController.Login()
SQL查询,只验证有效载荷,并返回一个有效的响应。
您对这种设计有什么看法?你有更好的实施?
为什么不使用建立标签做你需要什么? – Peter 2014-10-27 04:35:39