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

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

如何在不同的包中測試未導(dǎo)出的結(jié)構(gòu)字段?

如何在不同的包中測試未導(dǎo)出的結(jié)構(gòu)字段?

Go
catspeake 2023-03-21 16:57:18
我有一個用工廠創(chuàng)建對象的包。這些結(jié)構(gòu)具有未導(dǎo)出的字段,例如:package fetchertype GitFetcher struct {    uri    string}我有另一個包,它解析一些配置文件,然后構(gòu)建另一個使用上述對象的對象:package configtype Source struct {    fetcher    GitFetcher}我正在嘗試測試我的config包裹。我想構(gòu)建一些預(yù)期的對象,但由于我的測試正在進(jìn)行config并且我的測試GitFetcher正在進(jìn)行中,fetcher我不能只創(chuàng)建我想要的對象,例如:package configexpected := GitFetcher{    uri: "example.com/repo.git"      // doesn't work. Field isn't exported.}我如何跨包構(gòu)建對象以進(jìn)行這樣的測試?我不想使用fetcher工廠方法,因為它采用的參數(shù)并不簡單。
查看完整描述

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)出或使用模擬會更好,但如果由于某種原因這些不是選項,這會為您提供另一種選擇。


查看完整回答
反對 回復(fù) 2023-03-21
?
牛魔王的故事

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()。


查看完整回答
反對 回復(fù) 2023-03-21
?
一只甜甜圈

TA貢獻(xiàn)1836條經(jīng)驗 獲得超5個贊

如何測試未導(dǎo)出的 [...] 不同的包?

一點也不。不可撤銷,請勿嘗試。

(如果未導(dǎo)出的東西有一個導(dǎo)出的方法,那么你可以調(diào)用這個方法。)


查看完整回答
反對 回復(fù) 2023-03-21
?
動漫人物

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

沒有直接的方法可以實現(xiàn)這一點。您有多種選擇來實現(xiàn)類似的目標(biāo),所有這些都有自己的權(quán)衡。由您決定哪種權(quán)衡最適合您的情況。

一般來說,我會按以下順序嘗試:

  1. 使包config依賴于接口而不是結(jié)構(gòu)GitFetcher。這樣你就可以GitFetcher在你的測試中模擬。

  2. 添加一個額外的工廠方法,專門用于可以GitFetcher更容易構(gòu)建的測試。

  3. 將未導(dǎo)出的字段導(dǎo)出。

  4. 簡單地組合包。這樣您就可以訪問測試中兩個對象的未導(dǎo)出字段。


查看完整回答
反對 回復(fù) 2023-03-21
  • 4 回答
  • 0 關(guān)注
  • 167 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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