You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 17:13:08