go - 证明在函数内部模拟函数返回
问题描述
我想模拟一个函数的响应。但是此函数位于或在另一个函数内部调用。假设我有这个功能
// 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的响应如何实现?
解决方案
您应该考虑传入第二个函数作为第一个函数的参数。
你有几个选项可以做到这一点。您可以简单地将其作为参数传递。
func DoX(doY func()) {
doY()
}
这很简单,但随着核心变得更加复杂,效果不佳。更好的选择通常是在结构上创建函数方法。
type X struct {
Y Y
}
type Y interface {
Do()
}
func (x *X) Do() {
x.Y.Do()
}
然后 Y 可以用模拟替换。
推荐阅读
- qt - QML`MapGestureArea`,我怎样才能在`onRotationFinished`上获得旋转角度
- javascript - 为什么我不能使用观察数组变化的方法来观察节点变化,除非我使用变异观察者?
- python - 如何从文本文件中读取测试项目并在它们上运行 pytest
- python - 如何让 QTimer 在课堂上工作
- javascript - 在弹出窗口中实施身份验证时,快速会话 cookie 过期
- c - 动态链接库相互依赖时的链接顺序问题
- php - 在查询 Eloquent 字段中添加结果子查询
- rust - rust 按顺序组合相似的值
- c++ - 字符串:删除字符并将数字分成块
- python-3.x - 如何使用 Python Pandas 和 mysqlalchemy 更改表