golang 打桩,mock 数据怎么玩?
warning:
这篇文章距离上次修改已过427天,其中的内容可能已经有所变动。
在Go语言中,打桩(mocking)用于测试时模拟一些依赖的行为,使得测试不依赖于真实的外部依赖或者复杂的内部逻辑。在Go中,我们通常使用mockery工具或者mockgen工具来生成mock对象。
以下是使用mockery工具生成mock对象的步骤:
- 首先,你需要安装
mockery工具。如果你使用的是Go Modules(Go 1.11及以上版本),可以通过以下命令安装:
go get github.com/vektra/mockery/...@v1.4.0- 假设你有一个接口
IMyInterface,你想要为它生成一个mock。你可以使用以下命令:
mockery -name=IMyInterface这将在当前目录生成一个名为MockIMyInterface的mock文件。
以下是一个简单的例子:
假设你有一个接口IMyInterface:
package main
type IMyInterface interface {
DoSomething(arg int) string
}运行以下命令生成mock:
mockery -name=IMyInterface生成的MockIMyInterface文件大致如下:
package main
import "github.com/stretchr/testify/mock"
type MockIMyInterface struct {
mock.Mock
}
func (m *MockIMyInterface) DoSomething(arg int) string {
ret := m.Called(arg)
r0 := ret.String(0)
return r0
}你可以在测试中使用这个mock对象,例如:
package main
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestMyFunction(t *testing.T) {
mockObj := new(MockIMyInterface)
mockObj.On("DoSomething", 42).Return("mocked response")
result := MyFunction(mockObj)
assert.Equal(t, "mocked response", result)
mockObj.AssertExpectations(t)
}在这个例子中,我们创建了MockIMyInterface的一个实例,并设置了当DoSomething方法被调用时,如果参数是42,那么它将返回字符串"mocked response"。然后我们调用MyFunction,传入我们的mock对象,并验证MyFunction返回了我们预期的结果。最后,我们使用AssertExpectations方法来确保我们的mock对象如我们预期的那样被调用了。
评论已关闭