1

我有文件util.go

func Foo(service *SomeService) error {
    return helper(service)
}

func helper(service *SomeService) error {
    ...
}

我正在使用 编写单元测试testify,从Foo. 我想要:

  1. 嘲笑helper
  2. assert mockedhelper被调用了 1 次

我在https://stackoverflow.com/a/19168875/1661745看到了一些有前途的解决方案,但不确定:

方法 1:将 helper 作为参数传递给Foo. 我的疑问:testify 需要一个 Mock 结构来 AssertNumberOfCalls,而这里没有结构。

方法 2:为Foo. 我的疑问:我不知道为 utils 创建一个结构是否有意义。还需要更多的重构,因为调用者Foo需要一个 utils 结构。

最好的方法是什么?

4

1 回答 1

-1

如果您只想测试被调用的参数helper,这是我一直在使用的一种方法。同样的测试也将证明你的助手只被调用过一次。

    // Code

    var originalFn = func(arg1, arg2 string) {
        ...
    }


    func Foo() {
        originalFn(arg1,arg2)
    }

    // Tests

    func TestFoo(t *testing.T) {
        tempFn := originalFn
        var fnArgs []string
        originalFn = func(arg1, arg2) {
            fnArgs = append(fnArgs, []string{arg1, arg2})
        }
        defer originalFn = tempFn

        tests := []struct{
            expected []string
        }{
            {
                expected: []string{"arg1", "arg2"},
            },
        }

        for _, tt:= range tests {
            fnArgs := make([]string, 0)
            Foo()
            assert.Equal(t, tt.expected, fnArgs)
        }
    }
于 2020-06-05T05:46:34.993 回答