亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在不實現所有方法的情況下使用結構作為接口

在不實現所有方法的情況下使用結構作為接口

Go
喵喔喔 2022-12-19 10:54:20
例如,我有 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()方法已實現并且可以調用。


查看完整回答
反對 回復 2022-12-19
  • 1 回答
  • 0 關注
  • 94 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號