能否用Mockery等工具模拟含无返回值方法的ClassFunctions接口?
用Mockery模拟无返回值方法的Go接口方案
当然可以用Mockery模拟你的ClassFunctions接口——哪怕接口里的方法没有返回值,Mockery完全支持这类场景。下面是具体的实现步骤和测试示例:
1. 安装Mockery
先确保本地已安装Mockery工具,执行以下命令:
go install github.com/vektra/mockery/v2@latest
2. 生成Mock结构体
在项目根目录下运行命令,指定接口所在的包路径、接口名称,以及Mock文件的输出目录:
mockery --dir=./srcFunctions --name=ClassFunctions --output=./mocks --outpkg=mocks
执行后会在./mocks目录下生成mock_ClassFunctions.go文件,里面包含自动生成的ClassFunctions接口Mock实现。
3. 在单元测试中使用Mock
生成Mock后,就可以在测试代码里用它替代真实的ClassToUse实例,核心可以用来验证方法的调用情况:
package srcFunctions_test import ( "testing" "your-project/mocks" "github.com/stretchr/testify/assert" ) func TestMockClassFunctions(t *testing.T) { // 创建Mock实例 mock := mocks.NewClassFunctions(t) // 设置期望:FunctionOne被调用一次 mock.EXPECT().FunctionOne().Once() // 设置期望:FunctionTwo被调用一次 mock.EXPECT().FunctionTwo().Once() // 触发Mock方法调用 mock.FunctionOne() mock.FunctionTwo() // 断言所有期望是否都满足 assert.True(t, mock.AssertExpectations(t)) }
额外说明
对于无返回值的方法,Mockery的核心价值在于验证方法的调用次数、调用顺序,如果需要,你也可以为Mock方法添加自定义逻辑(比如修改内部变量、执行特定操作)。你之前卡壳的原因大概率是没找对生成Mock的命令,或者不熟悉如何用testify断言库配合验证调用行为。
内容的提问来源于stack exchange,提问作者Arnes Alisic
相关产品推荐
相关产品推荐

