【问题标题】:How to verify if a specific function is called如何验证是否调用了特定函数
【发布时间】:2015-12-02 05:39:14
【问题描述】:

我正在尝试用 Go 编写 TDD。然而,我被困在下面。

要写的测试:

func TestFeatureStart(t *testing.T) {}

要测试的实现:

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

如何测试这个简单的部分?我想我只想验证 exec 库是否正确。这就是我在 Java 中使用 Mockito 的方式。谁能帮我写这个测试?从我读过的内容来看,建议使用接口。

Feature-struct 只包含一个字符串 Cmd。

【问题讨论】:

    标签: go mocking stubbing


    【解决方案1】:

    你可以用接口伪造整个处理,但你也可以使用可伪造的函数。在代码中:

    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

    【讨论】:

    • 如果在 go 例程中使用它,或者你的函数将在 go 例程中被调用,它将具有数据竞争条件。只是这么说可能对其他人有帮助。
    猜你喜欢
    • 2015-12-11
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    • 1970-01-01
    相关资源
    最近更新 更多