>我有文件util.go
:
func Foo(service *SomeService) error {
return helper(service)
}
func helper(service *SomeService) error {
...
}
我正在使用testify
编写单元测试,从Foo
开始。我想:
- 模拟
helper
- 断言嘲笑
helper
被叫了 1 次
我在 https://stackoverflow.com/a/19168875/1661745 看到了一些有前途的解决方案,但不确定它们:
方法一:将助手作为Foo
参数传递。我的疑问:testify 需要一个 Mock 结构来断言调用次数,这里没有结构。
方法 2:为Foo
创建一个结构。我的疑问:我不知道为utils制作结构是否有意义。还需要更多重构,因为Foo
的调用者需要一个 utils 结构。
最好的方法是什么?
如果您只想测试在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)
}
}