第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何使用相互依賴的接口方法來(lái)模擬結(jié)構(gòu)

如何使用相互依賴的接口方法來(lái)模擬結(jié)構(gòu)

Go
呼啦一陣風(fēng) 2023-08-14 14:55:26
我在 Go 中為相當(dāng)常見的用例/模式編寫單元測(cè)試時(shí)遇到困難。如果你愿意的話,想象一下這樣的事情:package maintype Resource struct {    name string}type ResourceManager interface {    GetResource(id string) (*Resource, error)    GetAllResources() ([]*Resource, error)}type ResourceManagerImpl struct {}func (r *ResourceManagerImpl) GetResource(id string) (*Resource, error) {    resource := &Resource{}    var err error    // fetch resource.    // ...    return resource,  err}func (r *ResourceManagerImpl) GetAllResources() ([]*Resource, error) {    var resources []*Resource    var err error    // for _, id := range ids {    //  resource = r.GetResource(id)    //  resources = append(resources, resource)    // }    return resources, err}根據(jù)需要重復(fù)GetAllResources調(diào)用是一種常見的模式。GetResource我可以使用gomockortestify來(lái)測(cè)試 的所有排列GetResource。但是,在測(cè)試時(shí)GetAllResource,我想模擬GetResource。否則,測(cè)試將變成一場(chǎng)噩夢(mèng)。easymock這就是在 Java 中使用部分模擬的方式mockito。但是,尚不清楚如何在 Golang 中實(shí)現(xiàn)同樣的效果。具體來(lái)說(shuō),我找不到如何部分模擬struct. 大多數(shù)建議都圍繞著打破這樣的struct問(wèn)題,但在這種情況下,這struct已經(jīng)是最低限度了。ResourceManager為了測(cè)試的目的,不要破壞接口(分為單個(gè)和多個(gè))似乎是一個(gè)公平的要求,因?yàn)檫@沒(méi)有多大意義,充其量也是笨拙的,而且隨著更多此類方法進(jìn)入接口,也無(wú)法很好地?cái)U(kuò)展。
查看完整描述

1 回答

?
動(dòng)漫人物

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超10個(gè)贊

遇到這種情況我是這樣處理的:


func (r *ResourceManagerImpl) GetAllResources() ([]*Resource, error) {

   return getAllResources(r)

}



func getAllResources(r ResourceManager) ([]*Resource,error) {

  ...

}

然后您進(jìn)行測(cè)試getAllResources,而不是GetAllResources使用模擬的r. GetAllResources如果您遇到從代碼調(diào)用并且必須模擬的情況GetAllResources,您可以執(zhí)行以下操作:


var getAllResources=func(r ResourceManager) ([]*Resource,error) {

...

}

并將 getAllResources 分配給測(cè)試實(shí)例。


查看完整回答
反對(duì) 回復(fù) 2023-08-14
  • 1 回答
  • 0 關(guān)注
  • 175 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)