例如,我有 20 种方法的 dao。type UserDao interface { GetUser() (User, error) GetUsers() ([]User, error) ...}我想为测试创建模拟并只使用一种方法。type UserDaoMock struct { }fucn (UserDaoMock) GetUser() (User, error) { return User{}}有没有办法在测试中将 UserDaoMock 用作 UserDao 之前不实现其他方法?告诉编译器它应该是这样的?
1 回答

UYOU
TA贡献1878条经验 获得超4个赞
将接口嵌入到UserDao您的模拟结构中,因此它将提升所有方法。仅实现您需要的方法(实际将被调用的方法):
type UserDao interface {
GetUser() (User, error)
GetUsers() ([]User, error)
}
type UserDaoMock struct {
UserDao
}
func (UserDaoMock) GetUser() (User, error) {
return User{}, nil
}
测试它:
var dao UserDao
dao = UserDaoMock{}
fmt.Println(dao.GetUser())
这将输出(在Go Playground上尝试):
{} <nil>
请注意,调用任何其他方法当然会 panic,因为嵌入UserDao字段是nil,所以它们背后没有真正的实现。但是UserDaoMock确实实现UserDao了,并且该GetUser()方法已实现并且可以调用。
- 1 回答
- 0 关注
- 100 浏览
添加回答
举报
0/150
提交
取消