首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏golang算法架构leetcode技术php

    gomock 源码分析

    1,gomock的用法 gomock 有两种模式,反射模式和源码模式,都是通过接口生成对应的mock代码,测试的时候直接调用mock对象,相对于gostub不会进行地址替换更安全,且是并发安全的。 " mock_foo "gomock_study/exp1/mock" ) func TestSUT(t *testing.T) { ctl := gomock.NewController( Bar(gomock.Eq(99)). import ( reflect "reflect" gomock "github.com/golang/mock/gomock" ) // MockFoo is a mock of Foo Bar(gomock.Eq(99)).

    52910编辑于 2022-08-02
  • 来自专栏一个会写诗的程序员的博客

    gomock mockgen : unknown embedded interface

    /how-can-i-mock-specific-embedded-method-inside-interface https://pkg.go.dev/github.com/golang/mock/gomock

    1.6K30编辑于 2022-06-02
  • 来自专栏代码工具

    go测试框架gomock的使用

    介绍gomock是golang官方开发维护的接口级别的mock方案,包含了GoMock包和mockgen工具两部分,其中GoMock包完成对桩对象生命周期的管理,mockgen工具用来生成interface 要使用gomock的一个前提是模块之间务必通过接口进行依赖,而不是依赖具体实现,否则mock会非常困难。这个工具目前业界用的并不多,主要是局限性太大,所以我们只需要简单了解一下如何使用就行。 初始化一个mock controllermockCtrl := gomock.NewController(t)defer mockCtrl.Finish()mockObj := NewMockUserDao 限制stub函数的调用顺序,如果顺序不一致,则报错gomock.InOrder(c1, c2)// step4. 设置执行顺序更多使用方法请参考官方文档:https://pkg.go.dev/github.com/golang/mock/gomock#pkg-examples

    5.1K81编辑于 2022-06-30
  • 来自专栏Golang语言社区

    使用 Gomock 进行单元测试

    这时候就是 Gomock 大显身手的时候了 Gomock 是 Go 语言的一个 mock 框架,官方的那种 ? gomock 第三方库和 mock 代码的生成工具 mockgen。 gomock "github.com/golang/mock/gomock" 9 reflect "reflect" 10) 11 12// MockMale is a mock of Male 另外它在多个 goroutine 中是安全的 mock.NewMockMale:创建一个新的 mock 实例 gomock.InOrder:声明给定的调用应按顺序进行(是对 gomock.After 的二次封装 ():匹配任意值 gomock.Eq():通过反射匹配到指定的类型值,而不需要手动设置 gomock.Nil():返回 nil 建议更多的方法可参见 官方文档 二、生成多个 mock 文件 你可能会想一条条命令生成

    4.1K31发布于 2018-12-24
  • 来自专栏人人都是架构师

    Go每日一库之91:gomock

    GoMock is a mocking framework for the Go programming language. gomock 是官方提供的 mock 框架,同时还提供了 mockgen 工具用来辅助生成测试代码。 ().Get(gomock.Any()).Return(630, nil) m.EXPECT().Get(gomock.Not("Sam")).Return(0, nil) m.EXPECT().Get ().Get(gomock.Any()).Do(func(key string) { t.Log(key) }) m.EXPECT().Get(gomock.Any()).DoAndReturn ("not exist")) o2 := m.EXPECT().Get(gomock.Eq("Sam")).Return(630, nil) gomock.InOrder(o1, o2) GetFromDB

    80540编辑于 2023-09-30
  • 来自专栏黑光技术

    golang单元测试之mock

    GoMock测试框架包含了GoMock包和mockgen工具两部分,其中GoMock包完成对桩对象生命周期的管理,mockgen工具用来生成interface对应的Mock类源文件。 安装 GoMock官网: https://github.com/golang/mock GoMock安装: go get github.com/golang/mock/gomock mockgen代码生成工具安装 GoMock文档: GoMock框架安装完成后,可以使用go doc命令来获取文档: go doc github.com/golang/mock/gomock 这个文件比较简短,但给出了核心的使用说明。 测试结果 $ go test -v === RUN TestGetPeopleName gomock.Any: is anything gomock.Eq: is equal to he gomock.Any gomock整体功能还是非常强大的,更多的功能可以在实际使用中不断熟悉,另外也可以多看看官方文档和gomock的源码。

    11.8K40发布于 2019-03-06
  • 来自专栏一个会写诗的程序员的博客

    Go 接口嵌套组合的使用方法 & gomock 测试 stub 代码生成

    &RocketFetcher{ &service.BasicInfoServiceImpl{}, &driver.NavigatorDriver{}, } } gomock | go-test-report -t "Test Report" #gomock mockgen_navigator_driver: mockgen -source=.

    1.1K40编辑于 2022-06-05
  • 来自专栏DevOps

    Go:微服务架构下的单元测试(基于 Ginkgo、gomock 、Gomega)

    简介 本文主要使用 Ginkgo[2] 、gomock[3] 、Gomega[4] 工具来实现单元测试,之前不了解的同学,可以先熟悉一下相关文档。 还是此目录下运行 go test 命令,得到如下结果: 四、引入 gomock 包,mock 对象模拟依赖项 // gomock 主要包含两个部分:gomock 库和辅助代码生成工具 mockgen go get github.com/golang/mock go get github.com/golang/mock/gomock 1. UserRepo 这里是用 gomock 提供的 mockgen 工具生成要 mock 的接口的实现,在生成 mock 代码的时候,我们用到了 mockgen 工具,这个工具是 gomock 提供的用来为要 var cleaner func() var ctx context.Context var _ = BeforeEach(func() { ctl = gomock.NewController(

    95711编辑于 2024-03-29
  • 来自专栏贾维斯Echo的博客

    Go 单元测试之mock接口测试

    工具介绍 gomock 是一个 Go 语言的测试框架,在实际项目中,需要进行单元测试的时候。 二、安装 要安装 gomock,你可以使用 Go 包管理器 go get: go install go.uber.org/mock/mockgen@latest 三、使用 首先确保你已经安装了gomock (), gomock.Any()). 这些标志通常在 gomock 工具的帮助下使用,例如 gomock generate。 mockgen 命令用来为给定一个包含要mock的接口的Go源文件,生成mock类源代码。 参数 参数相关的用法有: gomock.Eq(value):表示一个等价于value值的参数 gomock.Not(value):表示一个非value值的参数 gomock.Any():表示任意值的参数

    76910编辑于 2024-04-19
  • 来自专栏一个会写诗的程序员的博客

    Go Mock 接口测试 单元测试 极简教程

    gomock 是 Google 开源的 Golang 测试框架。 GoMock is a mocking framework for the Go programming language. BatchGetProductInfoList(ctx, SqlClient, gomock.Any(), gomock.Any(), gomock.Any()). . // BatchGetBrandInfoList(ctx, SqlClient, gomock.Any(), gomock.Any(), gomock.Any()). // Return Bar(gomock.Eq(99)). Bar(gomock.Eq(99)).

    2.3K40编辑于 2022-05-30
  • 来自专栏人人都是架构师

    Go单测系列4—mock接口测试

    gomock gomock是Go官方提供的测试框架,它在内置的testing包或其他环境中都能够很方便的使用。我们使用它对代码中的那些接口类型进行mock,方便编写单元测试。 gomock支持针对参数、返回值、调用次数、调用顺序等进行打桩操作。 参数 参数相关的用法有: - gomock.Eq(value):表示一个等价于value值的参数 - gomock.Not(value):表示一个非value值的参数 - gomock.Any():表示任意值的参数 - gomock.Nil():表示空值的参数 - SetArg(n, value):设置第n(从0开始)个参数的值,通常用于指针参数或切片 具体示例如下: m.EXPECT().Get(gomock.Not 调用顺序 gomock还支持使用InOrder方法指定mock方法的调用顺序: // 指定顺序 gomock.InOrder( m.EXPECT().Get("1"), m.EXPECT().Get

    1.2K30编辑于 2023-09-10
  • 来自专栏LinkinStar's Blog

    Golang 单元测试 - 逻辑层

    /user.go // Package mock is a generated GoMock package. package mock import ( context "context" entity "go-demo/m/unit-test/entity" reflect "reflect" gomock "github.com/golang/mock/gomock" ) // MockUserRepo is a mock of UserRepo interface. type MockUserRepo struct { ctrl *gomock.Controller recorder * 就可以生成全部的 mock 嘞,所以及时文件很多,只需要利用好 go:generate 也能一次搞定 mockgen 比如针对指定参数,我们偷懒可以都用 Any,但常常还需要用 gomock.Eq() 或 gomock.Not("Sam") 总结 其实通常来说数据逻辑层的测试反而不容易出现问题,原因是:我们 mock 的数据都是我们想要的数据。

    70810编辑于 2023-02-22
  • 来自专栏一个会写诗的程序员的博客

    Go 面向接口编程实战

    GetMultiIdTimeRange(gomock.Any(), gomock.Any()). GetMultiMarketAnalysisComparisonIds(gomock.Any(), gomock.Any()). Query(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()). Query(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()). GetMultiMarketSummaryPriceBandDistributionDataTable(gomock.Any(), gomock.Any(), gomock.Any()).

    2.5K30编辑于 2022-06-12
  • 来自专栏运维开发王义杰

    用Mocking技术进行MySQL数据库的单元测试(Go版)

    GoMock工具 在Go中,我们可以使用GoMock工具来创建模拟对象。GoMock是由golang团队开发的一个模拟库,它可以自动根据接口生成模拟对象,非常方便。 首先,我们需要安装GoMock: go get github.com/golang/mock/gomock go install github.com/golang/mock/mockgen 然后, 我们可以通过gomock.Controller来创建模拟对象,并设置它的行为: func TestUserService_GetUser(t *testing.T) { ctrl := gomock.NewController = "Alice" { t.Fatalf("expect name Alice, but got %s", user.Name) } } 在这个测试中,我们使用gomock.Controller

    96920编辑于 2023-08-10
  • 来自专栏golang算法架构leetcode技术php

    造轮子:自动生成带mock的table driving test

    我们一般会用gotests 来生成golang测试代码,但是这个工具并不是那么好用,遇到了下面这些问题: 1,gomock 支持不友好,没有统一的模板,导致测试代码格式不统一,阅读性差 比如: 1.1 gomock 初学者喜欢写全局的mock代码,特别是引入了,anyTime()以后,会导致sutests 之间相互影响,提升了问题排查难度。 主要原理介绍,针对上面的测试代码可以做下调整,把 ctrl := gomock.NewController(t) defer ctrl.Finish() 放到case运行式的循环中,通过作用域的限制 { name: "case1", prepare: func(fields *fields, args *args) { gomock.InOrder( { name: "case1", prepare: func(fields *fields, args *args) { gomock.InOrder(

    61610编辑于 2022-08-02
  • 来自专栏米奇爱编程

    go test 下篇

    RELEASE_X86_64 x86_64 $ go version go version go1.12.4 darwin/amd64 安装 go get github.com/golang/mock/gomock 6 mockIndex.EXPECT().Put("a", 1) // literals work 7 mockIndex.EXPECT().Put("b", gomock.Eq (), gomock.Any()).Do(func(key string, _ interface{}) { 36 calledString = key 37 }) 38 例如第35行,当匹配到put(gomock.Any(), gomock.Any())时执行func(key string, _ interface{}),如果函数需要返回值用DoAndReturn函数。 gomock在生产代码中会被经常用到,当然也有其他的golang mock第三方开源库,例如testify。具体的选择需要根据大家的需求具体分析。 <!

    66220发布于 2019-09-10
  • 来自专栏运维开发王义杰

    在Go中使用Mocking技术进行数据库操作的单元测试(含模拟登录)

    对于数据库操作的单元测试,我们已经讨论了使用GoMock工具的一般方法。然而,如果在代码中直接实现数据库操作,而不是通过接口进行抽象,那么可能会影响我们使用mock工具进行测试。 *DBClient) Login(username, password string) (bool, error) { // 实现登录的逻辑... } 有了这个接口,我们就可以在测试中使用GoMock 使用模拟对象进行单元测试 与之前的示例类似,我们可以使用gomock.Controller来创建模拟对象,并设置它的行为: func TestDBClient_GetUser(t *testing.T) 注意,即使我们的代码是直接实现的,只要我们能为这些实现定义一个接口,我们就可以使用GoMock工具进行测试。 总的来说,通过引入接口和使用GoMock工具,我们可以很方便地进行数据库操作的单元测试,不论我们的代码是如何实现的。

    1.6K20编辑于 2023-08-10
  • 来自专栏技术之路

    go test 测试用例那些事(二) mock

    (t)) mockUser.EXPECT().V(gomock.Any(), "2").Return("a", nil).AnyTimes() var u User = mockUser a, err 但实际情况可能需要进行一些逻辑处理,返回动态的数据,可能通过DoAndReturn mockUser := mock_data.NewMockUser(gomock.NewController(t)) 看一下生成的两个struct // MockUser is a mock of User interface type MockUser struct { ctrl *gomock.Controller // NewMockUser creates a new mock instance func NewMockUser(ctrl *gomock.Controller) *MockUser { mock args用于保存指定的参数, 是gomock.Any()还是gomock.Eq()等,进行传入参数匹配。

    99620发布于 2020-07-22
  • 来自专栏章鱼的慢慢技术路

    Go语言相关练习_选择题(3)

    全局变量可通过GoStub框架打桩 过程可通过GoStub框架打桩 函数可通过GoStub框架打桩 interface可通过GoMock框架打桩 二、参考资料 GoMock框架使用指南 Golang错误和异常处理的正确姿势 Go Channel 详解_鸟窝 深入理解 Go Channel GoMock gomock_GoDoc 三、总结 本次主要针对map,异常处理,切片,接口,布尔变量的赋值、channel的语法进行了练习 ,并了解了GoMock框架。

    63630发布于 2018-08-03
  • 来自专栏光城(guangcity)

    优雅的使用Go进行单元测试

    Go 单元测试 1.单测工具 // go mock相关: go get github.com/golang/mock/gomock go get github.com/golang/mock/mockgen interface } 现在我们想测试Target函数,但是由于调用的A函数依赖于自己的某个函数,这里就是A调用了rpc接口拉别人接口数据,我们想mockA接口的目标是,想直接拿到A返回的数据即可,直接采用gomock 请求渲染后台 som := NewServiceClientProxy(opts...) // 发起rpc调用 rsp, _ := som.GetSerData(&req) 这个就比较简单了,直接采用gomock ctrl := gomock.NewController(t) mockedService := mocks.NewMockServiceClientProxy(ctrl) serStubs := gostub.Stub (), gomock.Any(), gomock.Any()).Return(&SerRsp{ // 填充字段 }, nil).AnyTimes() 2.3 monkey 使用monkey测试,

    3.3K20发布于 2020-07-20
领券