Golang ---testing包
golang自带了testing测试包,使用该包可以进行自动化的单元测试,输出结果验证,并且可以测试性能。
建议安装gotests插件自动生成测试代码:
go get -u -v github.com/cweill/gotests/...
测试文件及目录
使用testing测试包的测试文件名称需要以_test.go结尾,并且该测试文件需要与待测试的文件置于同一目录下。比如如下目录:

这里需要测试的是service目录中各个文件中的函数,则在该目录中创建一个名为service_test.go的文件,即可在该文件中调用其他文件的函数进行测试。
测试函数
在_test.go中通过编写测试函数来进行测试。
首先引入testing包
import (
"testing"
)
对于测试函数,其命名需要以“Test”开头,并且其后的字符串的第一个字符必须是大写,或者是数字。如果没有按照此规则进行命名,则该函数在测试时不会被执行。
其次,测试函数的参数必须为(t *testing.T),该参数包含有Log和Error等方法,用于输出测试结果,其中Log用于测试通过的情况,Error则用于测试出错的情况。
比如如下测试函数:
func TestUserLogin_normal(t *testing.T) {
err := User().Login("test1", "321")
if err == nil {
t.Log("Login test1 success")
} else {
t.Error(err)
}
}
该函数负责测试User().Login()方法的功能,当其功能正常执行时返回nil,则调用t.Log()输出测试通过的信息,否则测试不通过,调用t.Error()输出错误信息。
执行测试
在测试文件的目录下使用命令go test即可进行测试。
当直接执行go test时,会默认执行所有"Test"开头的函数,并且执行的顺序与函数定义的顺序相同。
如果需要指定某个函数进行测试,可以在命令后加上-run参数,该参数用于匹配要执行的测试函数的函数名(通过正则表达式来匹配)
比如要单独执行TestUserRegister_normal测试函数时,用以下命令:
go test -run=TestUserRegister_normal
当要执行所有名称前缀为TestUserRegister的测试函数时,用以下命令:
go test -run=TestUserRegister
前置条件:
1、文件名须以"_test.go"结尾
2、方法名须以"Test"打头,并且形参为 (t *testing.T)
go语言对测试函数的名称和签名规定:
功能测试函数: 名称必须以 Test为前缀、并且唯一参数的类型必须是 *testing.T 类型的参数声明
性能测试函数: 名称必须以Benchmark为前缀、并且唯一参数的类型必须是 *testing.B
示例测试函数: 名称必须以Example为前缀、但对参数列表没有强制规定
测试log:
t.Log、t.Logf方法的作用,常规打印日志,测试通过 则不会打印
如果想查看常规测试日志 可以用go test -v 如果想让某个测试函数执行过程中 立即失败 可以调用t.FailNow方法
t.Fail() 表示测试失败,但是后续代码可执行
t.FailNow() 表示 当前函数立即停止,后续代码不再执行 想在测试失败的同时打印失败测试日志 直接调用t.Error方法或者t.Errorf方法
t.Fatal方法和t.Fatalf方法,它们的作用是在打印失败错误日志之后立即终止当前测试函数的执行并宣告测试失败。
更具体地说,这相当于它们在最后都调用了t.FailNow方法。
性能测试:benchmark
命令
命令
go.exe test -v -bench=. -run=^$ ./...
goos: windows
goarch: amd64
BenchmarkGetPrimes-4 500000 3242 ns/op
PASS
ok _/D_/Golang_Puzzlers-master/src/puzzlers/article20/q3 5.835s 测试命令 及结果 解释
(./... 当前目录下所有的测试)
第一个标记及其值为-bench=. 只有有了这个标记,命令才会进行性能测试
*该标记的值.表明需要执行任意名称的性能测试函数 第二个标记及其值是-run=^$ 这个标记用于表明需要执行哪些功能测试函数,这同样也是以函数名称为依据的。
*该标记的值^$意味着:只执行名称为空的功能测试函数,换句话说,不执行任何功能测试函数。只执行Benchmark的函数
Golang ---testing包的更多相关文章
- Golang测试包
Golang测试包 golang自带了测试包(testing),直接可以进行单元测试.性能分析.输出结果验证等.简单看着官方文档试了试,总结一下: 目录结构和命令 使用golang的测试包,需要遵循简 ...
- Golang fmt包使用小技巧
h1 { margin-top: 0.6cm; margin-bottom: 0.58cm; direction: ltr; color: #000000; line-height: 200%; te ...
- Golang Vendor 包机制 及 注意事项
现在的 Go 版本是 1.8,早在 1.5 时期,就有了 Vendor 包机制,详情可查看博文:“理解 Go 1.5 vendor”. 遇到的问题 个人在使用 Glide 管理 Vendor 包时(附 ...
- Golang Vendor 包管理工具 glide 使用教程
Glide 是 Golang 的 Vendor 包管理器,方便你管理 vendor 和 verdor 包.类似 Java 的 Maven,PHP 的 Composer. Github:https:// ...
- golang reflect包使用解析
golang reflect包使用解析 参考 Go反射编码 2个重要的类型 Type Value 其中Type是interface类型,Value是struct类型,意识到这一点很重要 Type和Va ...
- Golang : cobra 包解析
笔者在<Golang : cobra 包简介>一文中简要的介绍了 cobra 包及其基本的用法,本文我们从代码的角度来了解下 cobra 的核心逻辑. Command 结构体 Comman ...
- Golang : pflag 包简介
笔者在前文中介绍了 Golang 标准库中 flag 包的用法,事实上有一个第三方的命令行参数解析包 pflag 比 flag 包使用的更为广泛.pflag 包的设计目的就是替代标准库中的 flag ...
- golang标准包中文手册
golang标准包中文手册 http://files.cnblogs.com/files/rojas/liudiwu-pkgdoc-master.zip
- Golang Context 包详解
Golang Context 包详解 0. 引言 在 Go 语言编写的服务器程序中,服务器通常要为每个 HTTP 请求创建一个 goroutine 以并发地处理业务.同时,这个 goroutine 也 ...
随机推荐
- 使用charles对jmeter进行抓包
- putty WinScp 免密登录远程 Linux
该方法的原理是预先生成一对公钥和私钥,私钥以文件的形式保存在本地,公钥保存在远程机器上.这样每次登录只需指定私钥文件,远程机器通过比对公钥和私钥来验证登录的合法性. Putty 免密登录 第一步 生成 ...
- Mysql与Postgresql常用命令比较
PostgreSQL MySQL 服务启动:1)#service postgresql start2)#/etc/init.d/postgresql start3)#su – postgresql$p ...
- bash: ip: command not found
Centos安装 # yum install iproute2 iproute2-doc Ubuntu安装 # apt-get install iproute2 iproute2-doc
- IntelliJ IDEA 2019从入门到癫狂 图文教程!
阅读本文大概需要 6 分钟. 作者:yizhiwazi 来源:www.jianshu.com/p/9c65b7613c30 前言:IntelliJ IDEA 如果说IntelliJ IDEA是一款现代 ...
- 后台接收参数报错 Required String parameter 'id' is not present
来自:https://blog.csdn.net/qq_15238647/article/details/81539287 关于ajax请求spring后台出现 Required String par ...
- 冰多多团队-第三次Scrum会议
冰多多团队-第三次Scrum会议 会议基本情况 会议时间:4月9日 21:30 - 21:45 会议地点:新主楼F座2楼沙发休息处 工作情况 团队成员 已完成任务 待完成任务 zpj 接入Action ...
- 【Gamma阶段】第二次Scrum Meeting
冰多多团队-Gamma阶段第二次Scrum会议 工作情况 团队成员 已完成任务 待完成任务 卓培锦 修改可移动button以及button手感反馈优化 编辑器风格切换(夜间模式) 牛雅哲 语音输入sh ...
- Http的状态码及状态码的类型
Http的状态码以及根据这些状态码分成5种类型 statusCode/100 /* * Copyright 2002-2013 the original author or authors. * * ...
- Win64 驱动内核编程-33.枚举与删除对象回调
转载:http://www.voidcn.com/article/p-wulgeluy-bao.html 枚举与删除对象回调 对象回调存储在对应对象结构体里,简单来说,就是存储在 ObjectType ...