【发布时间】:2018-06-07 02:55:59
【问题描述】:
我想模拟一个函数的响应。但是此函数位于或在另一个函数内部调用。假设我有这个功能
// 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 的响应,我该如何实现呢?
【问题讨论】:
-
使 ToMockResponse 成为全局变量,并将其值更改为您的模拟实现。另一个建议:停止在 Go 测试中模拟和断言。查看标准库中的测试并从中学习。
-
@volker 也许有些人不称它们为模拟,但即使在标准库测试中,他们也会创建与接口匹配的对象,并使用它们在测试中排除外部因素。