我在 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ò)展。
如何使用相互依賴的接口方法來(lái)模擬結(jié)構(gòu)
呼啦一陣風(fēng)
2023-08-14 14:55:26