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

时间:2015-09-06 16:08:26

标签: go mocking stubbing

目前我正努力在Go中编写TDD。然而,我仍然坚持以下。

要写的测试:

func TestFeatureStart(t *testing.T){

}

测试实施:

func (f *Feature) Start() error {
  cmd := exec.Command(f.Cmd)
  cmd.Start()
}

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

目前,Feature-struct只包含字符串Cmd。

1 个答案:

答案 0 :(得分:7)

你可以假装整个交易界面,但你也可以使用假的功能。在代码中:

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

在测试中:

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

另见:Andrew Gerrand的Testing Techniques talk