golang 打桩,mock 数据怎么玩?
在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对象如我们预期的那样被调用了。
评论已关闭