您现在的位置是:主页 > 数据库技术 > 数据库技术
go单元测试的方法有哪些
IDCBT2022-01-06【服务器技术】人已围观
简介本篇内容介绍了“go单元测试的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细
本篇内容介绍了“go单元测试的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
1.gomockgomock模拟对象的方式是让用户声明一个接口,然后使用gomock提供的mockgen工具生成mock对象代码。要模拟(mock)被测试代码的依赖对象时候,即可使用mock出来的对象来模拟和记录依赖对象的各种行为:比如最常用的返回值,调用次数等等。文字叙述有点抽象,直接上代码:
dick.go中DickFunc依赖外部对象OutterObj,本示例就是说明如何使用gomock框架控制所依赖的对象。
func DickFunc( outterObj MockInterface,para int)(result int){ fmt.Println("This init DickFunc") fmt.Println("call outter.func:") return outterObj.OutterFunc(para) }
mockgen工具命令是:
mockgen -source {source_file}.go -destination {dest_file}.go
比如,本示例即是:
mockgen -source src_mock.go -destination dst_mock.go
执行完后,可在同目录下找到生成的dst_mock.go文件,可以看到mockgen工具也实现了接口:
在本示例中只简单的更改了返回值,抛砖引玉:
func TestDickFunc(t *testing.T ){ mockCtrl := gomock.NewController(t) //defer mockCtrl.Finish() mockObj := dick.NewMockMockInterface(mockCtrl) mockObj.EXPECT().OutterFunc(3).Return(10) result :=dick.DickFunc(mockObj,3) t.Log("resutl:",result) }
使用go test命令执行这个单测
从结果看:本来应该输出3,最后输出就是10,和其他语言mock框架相似,生产出来的Mock对象不用自己去重定义这么麻烦。
2.httpexcept由于go在网络架构上的优秀封装,使得go在很多网络场景被广泛使用,而http协议是其中重要部分,在面对http请求的时候,可以对http的client进行测试,算是mock的特殊应用场景。
看一个简单的示例就轻松的看懂了:
func TestHttp(t *testing.T) { handler := FruitServer() server := httptest.NewServer(handler) defer server.Close() e := httpexpect.New(t, server.URL) e.GET("/fruits"). Expect(). Status(http.StatusOK).JSON().Array().Empty() }
其中还支持对不同方法(包括Header,Post等)的构造以及返回值Json的自定义,更多细节查看其官网
标签:很赞哦! ()