例如,我有 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 關注
- 94 瀏覽
添加回答
舉報
0/150
提交
取消