背景
测试从下到上大致可以分为单元测试、端到端测试和系统集成测试。
单元测试是最基础的,一般其代码量也是最多的,一般是针对函数、方法和类的测试,但其写好后改动一般是最小的,单元测试是其他测试的基石。
端到端测试是基于单元测试之上的,主要针对API和接口的测试,由于只针对接口进行测试,相对单元测试,端到端测试代码量更少,但面对需求的变更其测试代码也更容易变更。
系统集成测试主要是对整个系统进行测试,针对地是客户端的使用界面。
以现在主流的前后端分离来说明:
单元测试 | 端到端测试 | 系统集成测试 |
---|---|---|
针对视图层中的某个视图方法的测试,或者针对模型层中某个orm的测试 | 模拟接口请求进行测试 | 模拟用户操作进行测试 |
介绍完测试的类型,下面主要介绍下单元测试中的mock技术。
mock是一种用于单元测试数据模拟的技术,俗称打桩技术。
mock的好处:
1、并行工作:借助mock,接口之间可以实现解耦合,实现测试驱动开发
2、隔离系统:可以模拟请求,避免数据库的污染,同时可以做界面演示
Go 语言中的 mock
Go中mock可以使用官方的GoMock
包,以本人的https://github.com/shikanon/socks5proxy
项目为例,来介绍 mock 在 Go 的单元测试中的使用。
mock 安装go get -u github.com/golang/mock/gomock
go install github.com/golang/mock/mockgen
mockgen 生成 mock 文件
Go 提供了 mockgen 工具,用来生成:mockgen -source=socks5.go -destination=./mock/socks5_mock.go -package=mock
mockgen是根据接口发射的方式生成mock,所以source里面必须要有interface。
当然,也可以直接在注释前加入注释再借助 go generate
来生成,如://go:generate mockgen -source=socks5.go -destination=./mock/socks5_mock.go -package=mock
type Protocol interface {
HandleHandshake(b []byte) ([]byte, error)
SentHandshake(conn net.Conn) error
}
在项目目录下运行:go generate
func (c *Call) After(preReq *Call) *Call |