在不实现所有方法的情况下使用结构作为接口

例如,我有 20 种方法的 dao。


type UserDao interface {

    GetUser() (User, error)

    GetUsers() ([]User, error)

    ...

}

我想为测试创建模拟并只使用一种方法。


type UserDaoMock struct { }


fucn (UserDaoMock) GetUser() (User, error) {

    return User{}

}

有没有办法在测试中将 UserDaoMock 用作 UserDao 之前不实现其他方法?告诉编译器它应该是这样的?


喵喔喔
浏览 101回答 1
1回答

UYOU

将接口嵌入到UserDao您的模拟结构中,因此它将提升所有方法。仅实现您需要的方法(实际将被调用的方法):type UserDao interface {&nbsp; &nbsp; GetUser() (User, error)&nbsp; &nbsp; GetUsers() ([]User, error)}type UserDaoMock struct {&nbsp; &nbsp; UserDao}func (UserDaoMock) GetUser() (User, error) {&nbsp; &nbsp; return User{}, nil}测试它:var dao UserDaodao = UserDaoMock{}fmt.Println(dao.GetUser())这将输出(在Go Playground上尝试):{} <nil>请注意,调用任何其他方法当然会 panic,因为嵌入UserDao字段是nil,所以它们背后没有真正的实现。但是UserDaoMock确实实现UserDao了,并且该GetUser()方法已实现并且可以调用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go