4 回答

TA貢獻(xiàn)1801條經(jīng)驗 獲得超8個贊
絕對可以用未導(dǎo)出的字段測試結(jié)構(gòu)。
它很笨拙,但你可以使用fmt.Sprint().
func isExpectedStruct(myStruct *otherPak.MyStruct) bool {
expectedStr := "&{1 2}"
str := fmt.Sprint(myStruct)
return expectedStr == str
}
或者
如果你只想測試一個特定的領(lǐng)域
func isExpectedField(myStruct *otherPak.MyStruct) bool {
expectedSubStr := "unexportedField:2"
str := fmt.Sprintf("%+v", myStruct)
return strings.Contains(str, expectedSubStr)
}
但僅僅因為你可以并不意味著你應(yīng)該。
我認(rèn)為在大多數(shù)情況下,將字段更改為導(dǎo)出或使用模擬會更好,但如果由于某種原因這些不是選項,這會為您提供另一種選擇。

TA貢獻(xiàn)1830條經(jīng)驗 獲得超3個贊
如果您沒有太多需要測試的屬性,那么一種(hacky?)方法是為該屬性創(chuàng)建一個 getter 函數(shù)。
例如,在包中創(chuàng)建這樣的東西:
func (g *gitFetcher) GetUri() string {
return g.uri
}
在你的模擬中,你可以擁有
type GitFetcherMock struct {
mock.Mock
}
func (g *GitFetcherMock) GetUri() string {
args := g.Called()
return args.Get(0)
}
并且您可以在實際代碼中使用實際 URI 的任何地方傳入 GetUri()。

TA貢獻(xiàn)1836條經(jīng)驗 獲得超5個贊
如何測試未導(dǎo)出的 [...] 不同的包?
一點也不。不可撤銷,請勿嘗試。
(如果未導(dǎo)出的東西有一個導(dǎo)出的方法,那么你可以調(diào)用這個方法。)

TA貢獻(xiàn)1815條經(jīng)驗 獲得超10個贊
沒有直接的方法可以實現(xiàn)這一點。您有多種選擇來實現(xiàn)類似的目標(biāo),所有這些都有自己的權(quán)衡。由您決定哪種權(quán)衡最適合您的情況。
一般來說,我會按以下順序嘗試:
使包
config
依賴于接口而不是結(jié)構(gòu)GitFetcher
。這樣你就可以GitFetcher
在你的測試中模擬。添加一個額外的工廠方法,專門用于可以
GitFetcher
更容易構(gòu)建的測試。將未導(dǎo)出的字段導(dǎo)出。
簡單地組合包。這樣您就可以訪問測試中兩個對象的未導(dǎo)出字段。
- 4 回答
- 0 關(guān)注
- 167 瀏覽
添加回答
舉報