GO语言MOCK测试 | 青训营

81 阅读2分钟

一、GoMock简介

1、GoMock简介

GoMock是由Golang官方开发维护的测试框架,实现了较为完整的基于interface的Mock功能,能够与Golang内置的testing包良好集成,也能用于其它的测试环境中。GoMock测试框架包含了GoMock包和mockgen工具两部分,其中GoMock包完成对桩对象生命周期的管理,mockgen工具用来生成interface对应的Mock类源文件。

GoMock官网: github.com/golang/mock

GoMock安装: go get github.com/golang/mock/gomock

mockgen辅助代码生成工具安装: go get github.com/golang/mock/mockgen

GoMock文档: go doc github.com/golang/mock/gomock

2、mockgen使用

(1)mockgen工具选项

mockgen工具支持的选项如下:

-source: 指定接口的源文件

-destination: mock类代码的输出文件。如果没有设置本选项,代码将被输出到标准输出。-destination选项输入太长,因此推荐使用重定向符号>将输出到标准输出的内容重定向到某个文件,并且mock类代码的输出文件的路径必须是绝对路径。

-package: 指定mock类源文件的包名。如果没有设置本选项,则包名由mock_和输入文件的包名级联而成。

-aux_files: 附加文件列表用于解析嵌套定义在不同文件中的interface。指定元素列表以逗号分隔,元素形式为foo=bar/baz.go,其中bar/baz.go是源文件,foo是-source选项指定的源文件用到的包名。

-build_flags: 传递给build工具的参数

-imports: 依赖的需要import的包

-mock_names:自定义生成mock文件的列表,使用逗号分割。如Repository=MockSensorRepository,Endpoint=MockSensorEndpoint。 Repository、Endpoint为接口,MockSensorRepository,MockSensorEndpoint为相应的mock文件。

(2)mockgen工作模式

mockgen有两种操作模式:源文件模式和反射模式。

源文件模式通过一个包含interface定义的源文件生成mock类文件,通过-source标识开启,-imports和-aux_files标识在源文件模式下是有用的。mockgen源文件模式的命令格式如下 :

mockgen -source=xxxx.go [other options]

反射模式通过构建一个程序用反射理解接口生成一个mock类文件,通过两个非标志参数开启:导入路径和用逗号分隔的符号列表(多个interface)。

mockgen反射模式的命令格式如下:

mockgen packagepath Interface1,Interface2... 第一个参数是基于GOPATH的相对路径,第二个参数可以为多个interface,并且interface之间只能用逗号分隔,不能有空格。

(3)mockgen工作模式适用场景

mockgen工作模式适用场景如下:

A、对于简单场景,只需使用-source选项。

B、对于复杂场景,如一个源文件定义了多个interface而只想对部分interface进行mock,或者interface存在嵌套,则需要使用反射模式。