go 单元测试框架介绍
最近项目在补充单元测试,这里介绍以下几个go里流行的单元测试框架。
gomock
gostub
monkey
Convey
下面介绍下各个框架的主要用途
convey 主要用途是用来组织测试用例的
gomock 主要用来给接口打桩的。mockgen可以生成对应的接口测试文件。
gostub 主要用来给变量、函数、过程打桩 但是给函数打桩时,需要做侵入式修改
monkey 主要也是用来给变量、函数打桩的
gostub打桩的原理式通过反射,所以要求调用stub函数传入第一个参数必须是指针,然而函数并没有指针的概念,所以需要对函数做侵入式修改。
monkey打桩的原理则是在运行时通过汇编语句重写可执行文件,将待打桩函数或方法的实现跳转到桩实现,原理和热补丁类似。但是moneky不是线程安全的,不能用在并发测试中
对于以上几个框架,简书上有大神已经做了详细介绍了
下面给出链接
convey
https://www.jianshu.com/p/e3b2b1194830
gomock
https://www.jianshu.com/p/f4e773a1b11f
monkey
https://www.jianshu.com/p/2f675d5e334e
gostub
https://www.jianshu.com/p/70a93a9ed186
这里简单提一下convey
一般都是convey+monkey或者convey+gostub结合使用
package tests import (
"errors"
. "github.com/smartystreets/goconvey/convey"
"testing"
) func Func(arg string) error {
if len(arg) > {
return nil
} else {
return errors.New("arg is nil")
}
} func TestFunc(t *testing.T) {
Convey("test Func", t, func() {
Convey("Func should return nil when arg is not empty", func() {
arg := ""
err := Func(arg)
So(err, ShouldBeNil)
})
Convey("Func should return error when arg is empty", func() {
arg := ""
exceptErr := errors.New("arg is nil")
err := Func(arg)
So(err, ShouldBeError, exceptErr)
})
})
}
主要使用了两个函数Convey和So函数
convey函数可以嵌套使用,第一个参数都是对测试用例的描述,第二个参数有所不同。外层的convery第二个参数必须时testing.T指针。第三个参数是函数,保存其他测试用例。内层的convey的第二个参数是测试执行函数
So函数用来对函数的返回值做判断的。提供了很多类型,ShouldBeNil,ShouldBeERRor,ShouldBeEmpty等等。基本都覆盖到了
go 单元测试框架介绍的更多相关文章
- 单元测试框架之unittest(七)
一.摘要 前篇文章已经详细介绍了unittest框架的特性,足以满足我们日常的测试工作,但那并不是unittest的全部,本片博文将介绍一些应该知道但未必能经常用到的内容 然而,想全部掌握unitte ...
- JavaScript单元测试框架JsUnit基本介绍和使用
JavaScript单元测试框架JsUnit基本介绍和使用 XUnit framework XUnit是一套标准化的独立于语言的概念和结构集合,用于编写和运行单元测试(Unit tests). 每一个 ...
- Python+selenium之简单介绍unittest单元测试框架
Python+selenium之简单介绍unittest单元测试框架 一.unittest简单介绍 unittest支持测试自动化,共享测试用例中的初始化和关闭退出代码,在unittest中最小单元是 ...
- Python+Selenium框架设计篇之-简单介绍unittest单元测试框架
前面文章已经简单介绍了一些关于自动化测试框架的介绍,知道了什么是自动化测试框架,主要有哪些特点,基本组成部分等.在继续介绍框架设计之前,我们先来学习一个工具,叫unittest. unit ...
- 27. Unittest单元测试框架的介绍与使用
unittest单元测试框架 先贴一下unittest官网地址.unittest文档开头介绍了四个重要的概念:test fixture,test case, test suite, test runn ...
- 推荐:一个写的相当好的介绍C++单元测试框架Google Test (gtest) 教程
原文来自:http://www.cnblogs.com/coderzh/archive/2009/04/06/1426755.html 虽然有点晚了,还是一口气读完了全部文章.作者言简意赅和明快的风格 ...
- [翻译]Spring框架参考文档(V4.3.3)-第二章Spring框架介绍 2.1 2.2 翻译--2.3待继续
英文链接:http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/overview.ht ...
- JavaScript单元测试框架-Jasmine
Jasmine的开发团队来自PivotalLabs,他们一开始开发的JavaScript测试框架是JsUnit,来源于著名的JAVA测试框架JUnit.JsUnit是xUnit的JavaScript实 ...
- Python单元测试框架之pytest -- 断言
对于测试来讲,不管是功能测试,自动化测试,还是单元测试.一般都会预设一个正确的预期结果,而在测试执行的过程中会得到一个实际的结果.测试的成功与否就是拿实际的结果与预期的结果进行比较.这个比的过程实际就 ...
随机推荐
- 斐波那契数性质 gcd(F[n],F[m])=F[gcd(n,m)]
引理1 结论: \[F(n)=F(m)F(n-m+1)+F(m-1)F(n-m)\] 推导: \[ \begin{aligned} F(n) &= F(n-1)+F(n-2) \\ & ...
- 硬币游戏2&&Cutting Game——Grundy值
Grundy值 当前状态的Grundy值就是除任意一步所能转移到的状态的Grundy值以外的最小非负整数, 以硬币问题一为例,可写成: int init_grundy() { sg[] = ; ;i ...
- 关于“Error: listen EADDRINUSE: address already in use 127.0.0.1:3000”
运行vue项目的时候报 Error: listen EADDRINUSE: address already 这个错,表示3000端口号被占用. 解决方法: 1.打开cmd,执行 netstat -n ...
- webpack.config.js配置信息的说明
module.exports = { entry: "./src/main.js", output: { filename: "build/build.js" ...
- HUSTOJ 有序表的最小和
一次奇怪的AC经历...上周被这道题卡了3天... 传送门:http://oj.gdsyzx.edu.cn/problem.php?id=1475 题目描述 给出两个长度为n的有序表A和B,在A和B中 ...
- python的虚拟环境管理工具venv使用方法介绍及与nodejs的包管理方式对比
一.nodejs 包管理方式 我们知道, nodejs的包管理工具npm可以安装项目所需要的包,安装方法及区别如下: npm i module_name -g 全局安装 npm i module_na ...
- pipelinewise 基于singer 指南的的数据pipeline 工具
pipelinewise 是基于开源singer 指南开发的数据pipeline工具,与singer tap 以及target 兼容 支持的特性 内置的elt 特性 轻量级 支持多种复制方法,cdc( ...
- redisql 试用
redisql 是一个redis 模块,可以让redis 支持sql 查询,基于rust编写 具有以下特性 快速,每秒130k的插入 使用标准sql 容易操作,基于redis,使用标准的redis 二 ...
- [Cqoi2016]K远点对 K-Dtree
4520: [Cqoi2016]K远点对 链接 bzoj 思路 用K-Dtree求点的最远距离. 求的时候顺便维护一个大小为2k的小根堆. 不知道为啥一定会对. 代码 #include <bit ...
- 【JZOJ6245】【20190627】A
题目 给定一颗\(n\)个点的树,边权为1,并给出\(\{w_i\}\)满足\(w_0=0\) \[ f(i) = \sum_{j=1}^{n} w_{dis(i,j)} \] 依次输出每一个\(f_ ...