3 回答

TA貢獻1829條經驗 獲得超6個贊
雖然劫持測試可執行文件以運行特定功能是可行的,但僅使用常規依賴注入會更直接。不需要魔法。
設計一個可以運行命令的界面(例如CommandExecutor
),然后將其中一個作為您的輸入,用于運行命令所需的任何功能。然后,您可以在測試期間提供滿足接口(手工制作或使用您選擇的工具生成,如 GoMock)的模擬實現。為您的生產代碼提供真正的實現(調用exec
包)。您的模擬實現甚至可以對參數進行斷言,以便您知道命令正在正確“執行”。

TA貢獻1830條經驗 獲得超9個贊
實際上有一種方法可以做到這一點。所有功勞歸于這篇文章。查看它以了解以下發生的情況:
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)
}
- 3 回答
- 0 關注
- 155 瀏覽
添加回答
舉報