我想模拟一个函数的响应。但是这个函数在另一个函数中定位或调用。假设我有这个功能
// main.go
func TheFunction() int {
// Some code
val := ToMockResponse()
return val
}
func ToMockResponse() int {
return 123
}
现在我的测试文件
// main_test.go
func TestTheFunction(t *testing.T) {
mockInstance = new(randomMock)
mockInstance.On("ToMockResponse").Return(456)
returned := TheFunction()
assert.Equal(t, 456, returned)
}
正如你在函数 TheFunction()中看到的那样,调用了函数 ToMockResponse 。现在我想测试 TheFunction ,但我想模拟 ToMockResponse 的响应我该如何实现呢?
答案 0 :(得分:1)
你应该考虑传递第二个函数作为第一个参数。
你有几个选择。您可以简单地将其作为参数传递。
func DoX(doY func()) {
doY()
}
这很简单,但由于核心变得更复杂,所以效果不佳。更好的选择通常是在结构上创建函数方法。
type X struct {
Y Y
}
type Y interface {
Do()
}
func (x *X) Do() {
x.Y.Do()
}
然后Y可以用模拟替换。