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 关注
- 118 浏览
添加回答
举报