我们可以看一下 mockgen 的帮助文档,还有其他的参数供我们使用
mockgen
mockgen has two modes of operation: source and reflect.
Source mode generates mock interfaces from a source file.
It is enabled by using the -source flag. Other flags that
may be useful in this mode are -imports and -aux_files.
Example:
mockgen -source=foo.go [other options]
Reflect mode generates mock interfaces by building a program
that uses reflection to understand interfaces. It is enabled
by passing two non-flag arguments: an import path, and a
comma-separated list of symbols.
Example:
mockgen database/sql/driver Conn,Driver
-aux_files string
(source mode) Comma-separated pkg=path pairs of auxiliary Go source files.
-build_flags string
(reflect mode) Additional flags for go build.
-copyright_file string
Copyright file used to add copyright header
-debug_parser
Print out parser results only.
-destination string
Output file; defaults to stdout.
-exec_only string
(reflect mode) If set, execute this reflection program.
-imports string
(source mode) Comma-separated name=path pairs of explicit imports to use.
-mock_names string
Comma-separated interfaceName=mockName pairs of explicit mock names to use. Mock names default to ‘Mock’+ interfaceName suffix.
-package string
Package of the generated code; defaults to the package of the input with a ‘mock_’ prefix.
-prog_only
(reflect mode) Only generate the reflection program; write it to stdout and exit.
-self_package string
The full package import path for the generated code. The purpose of this flag is to prevent import cycles in the generated code by trying to include its own package. This can happen if the mock’s package is set to one of its inputs (usually the main one) and the output is stdio so mockgen cannot detect the final output package. Setting this flag will then tell mockgen which import to exclude.
-source string
(source mode) Input Go source file; enables source mode.
-version
Print version.
-write_package_comment
Writes package documentation comment (godoc) if true. (default true)
2021/10/30 16:43:25 Expected exactly two arguments
一般用的比较多的就是
-
-source 源文件
-
-destination 目标文件
-
-imports 依赖的需要 import 的包
-
-build_flags 传递给build工具的参数
-
-aux_files 接口文件不止一个文件时附加文件
-
-package 设置 mock 文件的包名,不设置的话,mock 文件的包名默认是 mock_输入文件的包名
通过上述指令生成的 mock 文件如下:
- NewMockMyFunc
创建一个新的 mock 实例
- EXPECT
允许调用者指示预期用途的对象
- GetInfo
mock 的基础方法,也就是我们需要 mock 的方法
=====================================================================
myuser_test.go
- myuser.go 对应的单测文件 , 使用了 mock 的方式
package myfunc
import (
“fmt”
“testing”
gomock “github.com/golang/mock/gomock”
)
func Test_getUser(t *testing.T) {
mockCtl := gomock.NewController(t)
mockMyFunc := NewMockMyFunc(mockCtl)
mockMyFunc.EXPECT().GetInfo().Return(“xiaomotong”)
v := getUser(mockMyFunc)
if v == “xiaomotong” {
fmt.Println(“get user right!”)
} else {
t.Error(“get error user”)
}
}
看到上述单测文件,可以还不是特别明白区别,我们来看看不用 mock 的时候,我们会是如何去写单测呢
package myfunc
import (
“fmt”
“testing”
gomock “github.com/golang/mock/gomock”
)
func Test_getUser(t *testing.T) {
m := myfunc.CreateMyFunc() // 也就是说需要自己创建一个对象
v := getUser(m)
if v == “xiaomotong” {
fmt.Println(“get user right!”)
} else {
t.Error(“get error user”)
}
}
m := myfunc.CreateMyFunc() 看到上述这一句话,是创建对应的对象,再将该对象作为参数传入到 getUser 函数中,正常情况下这样做单测没有问题
先自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以扫码领取!
![img](https://i-blog.csdnimg.cn/blog_migrate/85c896be854f2af71b51fa2866e8168c.jpeg)
如何快速更新自己的技术积累?
- 在现有的项目里,深挖技术,比如用到netty可以把相关底层代码和要点都看起来。
- 如果不知道目前的努力方向,就看自己的领导或公司里技术强的人在学什么。
- 知道努力方向后不知道该怎么学,就到处去找相关资料然后练习。
- 学习以后不知道有没有学成,则可以通过面试去检验。
我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!
以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目
。
- 知道努力方向后不知道该怎么学,就到处去找相关资料然后练习。
- 学习以后不知道有没有学成,则可以通过面试去检验。
我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!
以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目
[外链图片转存中…(img-hgoKwREa-1711366997112)]
[外链图片转存中…(img-dIYoGJJ8-1711366997112)]
需要更多Java资料的小伙伴可以帮忙点赞+关注,点击传送门,即可免费领取!