Go单元测试小结(方法、框架)

  1. 对于第三方package的函数调用,如果该函数可能会出错,且需要覆盖出场景下的代码,那么加封一层,这样必要时我们可以替换自己的函数。
  2. 对于第三方函数的调用,考虑将直接依赖改为接口依赖,这样必要时我们可以新建一个自己的接口实现,这样我们可以随意控制实现的细节。
  3. 可以将第三方的函数调用,通过var = func这种形式来声明,然后就可以通过GoStub库来替换函数。
  4. 对于我们自己编写的方法调用,可以令方法调用一个同等的函数,然后令这个函数用方法3来声明,然后这样我们可以通过替换函数来替换方法。
  5. 内部的各个模块之间,通过接口来调用,以便后续注入不同的接口实现,来达到测试的目的。
  6. 如果要并发测试,那么可以考虑写一个test.py,同时跑多个go test。
  7. 对于内部模块,尽量提供一个xxxxtest包,直接提供打桩功能,另外对于内部模块,尽量对外暴露接口,而不是结构体(实现)。
  8. 个人通常尽量不使用框架来测试代码,如果要用的话,推荐以下几个:
    常见的go test打桩框架:
  • GoStub:替换全局变量、函数、过程
  • monkey:替换函数、方法
  1. 测试文件跟待测试的文件放同一个目录下,名字叫xxx_test.go,包名为xxxx_test。
  2. 运行测试:
go test -cover=true xxxx -coverprofile=out.out 将在当前目录生成覆盖率数据。

配合 go tool cover -html=out.out 在浏览器中打开 HTML 报告。

或者使用 go tool cover -html=out.out -o=out.html
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Python语言特性 1 Python的函数参数传递 看两个如下例子,分析运行结果: 代码一: a = 1 def...
    时光清浅03阅读 522评论 0 0
  • Python语言特性 1 Python的函数参数传递 看两个如下例子,分析运行结果: 代码一: a = 1 def...
    伊森H阅读 3,108评论 0 15
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,175评论 1 32
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,441评论 0 3
  • 又是一个海棠盛开的季节,带着淡淡的忧伤与孕育的希望,我们又开始了新的征程。 不知道,海棠盛开的树下的你,怀抱着怎...
    黯稥阅读 235评论 3 3