如何验证Golang中是否调用了特定函数

Pat*_*ick 8 mocking go stubbing

目前我正在尝试用Go编写TDD.然而,我坚持以下.

写的测试:

func TestFeatureStart(t *testing.T){

}
Run Code Online (Sandbox Code Playgroud)

实施测试:

func (f *Feature) Start() error {
  cmd := exec.Command(f.Cmd)
  cmd.Start()
}
Run Code Online (Sandbox Code Playgroud)

如何测试这个简单的位.我想我只想验证exec-library是否正确使用.(我在Java中使用Mockito的方式).任何人都可以帮我写这个测试我不太清楚互联网上目前可用的答案是什么意思.他们建议使用接口.

目前Feature-struct只包含一个字符串Cmd.

Ain*_*r-G 7

你可以用接口来伪造整个交易,但你也可以使用假的函数.在代码中:

var cmdStart = (*exec.Cmd).Start
func (f *Feature) Start() error {
    cmd := exec.Command(f.Cmd)
    return cmdStart(cmd)
}
Run Code Online (Sandbox Code Playgroud)

在测试中:

called := false
cmdStart = func(*exec.Cmd) error { called = true; return nil }
f.Start()
if !called {
    t.Errorf("command didn't start")
}
Run Code Online (Sandbox Code Playgroud)

另请参阅:Andrew Gerrand的测试技术讲座.

  • 如果在 go 例程中使用它,或者您的函数将在 go 例程中调用,则会出现数据竞争条件。只是这么说它可能会帮助别人。 (3认同)