首页 > 极客资料 博客日记
go:极简上手使用 stretchr/testify 进行mock测试
2024-10-21 12:30:05极客资料围观17次
极客之家推荐go:极简上手使用 stretchr/testify 进行mock测试这篇文章给大家,欢迎收藏极客之家享受知识的乐趣
库安装
首先,安装 Mock 类生成工具 Mockery:
go install github.com/vektra/mockery/v2@v2.45.1
实际上,你也可以手动创建 Mock 类。
生成 Mock 类
假设你在 internal/metrics
包下有如下定义的接口:
package metrics
type Getter[T any] interface {
Get() (T, error)
}
在项目根目录,可以使用以下命令生成 Mock 类:
mockery --name=Getter --dir=internal/metrics
生成的 Mock 类会在 mocks
目录下的 getter.go
文件中。
编写用例
package metrics
import (
"testing"
mocks "xxx/mock/internal_/metrics"
"github.com/stretchr/testify/suite"
)
type GetterTestSuite struct {
suite.Suite
}
func TestGetter(t *testing.T) {
suite.Run(t, new(GetterTestSuite))
}
func (t *GetterTestSuite) TestGetterInt() {
t.T().Logf("TestGetterInt run")
getter := new(mocks.Getter[int])
getter.On("Get").Return(1, nil)
val, err := getter.Get()
t.Nil(err)
t.Equal(1, val)
}
说明:
- GetterTestSuite 是测试集的名称,每个method都会作为测试用例调用。TestGetter 函数运行时,会调用 TestGetterInt。
- TestGetterInt 中引用的
t
是TestSuite
,包含许多有用的断言函数,如Equal
和Nil
等。 - 创建 Mock 实例后,可以使用
On
方法来标记方法对应的返回值。假设Get
方法可以传递参数,则可以根据不同的参数选择不同的返回值。
Mock 常见用法:
假设 mockObj
是 Mock 类的实例:
mockObj.On("GetApiKey", mock.Anything).Return("dummy_api_key")
:GetApiKey
有一个参数,且无论传什么,都会返回dummy_api_key
。mockObj.On("GetAllClusterInfo").Maybe().Return(GenerateTestClustersInfo())
:如果使用Maybe
,则GetAllClusterInfo
不一定必须被调用;如未使用Maybe
且函数未被调用,则断言将失败。mockObj.On("RunCleanup", true, true).Once().Return(nil, nil)
:RunCleanup
有两个参数,所以需要传递两个 Mock 的值进入。Once
表示这个函数只应该被调用一次。mockObj.AssertNumberOfCalls(t.T(), "RunCleanup", 4)
:可以检查方法的调用次数。
通过这些用法,用户可以完全控制 Mock 类的每个方法的行为,并进行一些检查以完善整个测试。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- Nuxt.js 应用中的 prerender:routes 事件钩子详解
- 【问题解决】Tomcat由低于8版本升级到高版本使用Tomcat自带连接池报错无法找到表空间的问题
- 【FAQ】HarmonyOS SDK 闭源开放能力 —Vision Kit
- 六、Spring Boot集成Spring Security之前后分离认证流程最佳方案
- 《JVM第7课》堆区
- .NET 8 高性能跨平台图像处理库 ImageSharp
- 还在为慢速数据传输苦恼?Linux 零拷贝技术来帮你!
- 刚毕业,去做边缘业务,还有救吗?
- 如何避免 HttpClient 丢失请求头:通过 HttpRequestMessage 解决并优化
- 让性能提升56%的Vue3.5响应式重构之“版本计数”