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

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

如何模擬 *exec.Cmd / exec.Command()?

如何模擬 *exec.Cmd / exec.Command()?

Go
Qyouu 2022-11-08 15:43:17
我需要嘲笑exec.Command()。我可以使用以下方法模擬它:var rName stringvar rArgs []stringmockExecCommand := func(name string, arg ...string) *exec.Cmd {    rName = name    rArgs = arg    return nil}但是,這在實(shí)際代碼中不起作用,因?yàn)樗г?nil 指針,因?yàn)榉祷豦xec.Cmd調(diào)用Run().我試圖像這樣模擬它:type mock exec.Cmdfunc (m *mock) Run() error {    return nil}var rName stringvar rArgs []stringmockExecCommand := func(name string, arg ...string) *exec.Cmd {    rName = name    rArgs = arg    m := mock{}    return &m}但它抱怨:cannot use &m (value of type *mock) as *exec.Cmd value in return statementcompilerIncompatibleAssign.有沒(méi)有辦法解決這個(gè)問(wèn)題?有沒(méi)有更好的模擬方法exec.Command()?如果我返回一個(gè)“模擬”命令,模擬函數(shù)就可以工作,盡管我Run()也更喜歡控制這個(gè)函數(shù):var rName stringvar rArgs []stringmockExecCommand := func(name string, arg ...string) *exec.Cmd {    rName = name    rArgs = arg    return exec.Command("echo")}
查看完整描述

3 回答

?
肥皂起泡泡

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

雖然劫持測(cè)試可執(zhí)行文件以運(yùn)行特定功能是可行的,但僅使用常規(guī)依賴(lài)注入會(huì)更直接。不需要魔法。

設(shè)計(jì)一個(gè)可以運(yùn)行命令的界面(例如CommandExecutor),然后將其中一個(gè)作為您的輸入,用于運(yùn)行命令所需的任何功能。然后,您可以在測(cè)試期間提供滿足接口(手工制作或使用您選擇的工具生成,如 GoMock)的模擬實(shí)現(xiàn)。為您的生產(chǎn)代碼提供真正的實(shí)現(xiàn)(調(diào)用exec包)。您的模擬實(shí)現(xiàn)甚至可以對(duì)參數(shù)進(jìn)行斷言,以便您知道命令正在正確“執(zhí)行”。


查看完整回答
反對(duì) 回復(fù) 2022-11-08
?
慕標(biāo)琳琳

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

實(shí)際上有一種方法可以做到這一點(diǎn)。所有功勞歸于這篇文章。查看它以了解以下發(fā)生的情況:


func fakeExecCommand(command string, args...string) *exec.Cmd {

    cs := []string{"-test.run=TestHelperProcess", "--", command}

    cs = append(cs, args...)

    cmd := exec.Command(os.Args[0], cs...)

    cmd.Env = []string{"GO_WANT_HELPER_PROCESS=1"}

    return cmd

}


func TestHelperProcess(t *testing.T){

    if os.Getenv("GO_WANT_HELPER_PROCESS") != "1" {

        return

    }

    os.Exit(0)

}


查看完整回答
反對(duì) 回復(fù) 2022-11-08
?
繁星淼淼

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

如何模擬 *exec.Cmd / exec.Command()?

你不能。提出一個(gè)非基于模擬的測(cè)試策略。


查看完整回答
反對(duì) 回復(fù) 2022-11-08
  • 3 回答
  • 0 關(guān)注
  • 144 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(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)