go - 作证模拟函数在函数内部返回

标签 go testify

我想模拟一个函数的响应。但是这个函数位于或在另一个函数内部调用。假设我有这个功能

// 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 可以用 mock 代替。

关于go - 作证模拟函数在函数内部返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50732306/

相关文章:

go - mux 在 url 中有空参数

database - Golang worker 池导致数据库损坏

unit-testing - 来自 golang 包的模拟方法

Go编译器技巧

go - 使用 Iris-go 处理 body 支柱

go - 未导出的标识符包在 Golang 中是否公开?

unit-testing - 模拟接口(interface)函数没有被调用

unit-testing - 对使用 gorilla/mux URL 参数的函数进行单元测试

go - InDelta 和 InEpsilon 之间的区别