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包的更多相关文章

  1. Golang测试包

    Golang测试包 golang自带了测试包(testing),直接可以进行单元测试.性能分析.输出结果验证等.简单看着官方文档试了试,总结一下: 目录结构和命令 使用golang的测试包,需要遵循简 ...

  2. Golang fmt包使用小技巧

    h1 { margin-top: 0.6cm; margin-bottom: 0.58cm; direction: ltr; color: #000000; line-height: 200%; te ...

  3. Golang Vendor 包机制 及 注意事项

    现在的 Go 版本是 1.8,早在 1.5 时期,就有了 Vendor 包机制,详情可查看博文:“理解 Go 1.5 vendor”. 遇到的问题 个人在使用 Glide 管理 Vendor 包时(附 ...

  4. Golang Vendor 包管理工具 glide 使用教程

    Glide 是 Golang 的 Vendor 包管理器,方便你管理 vendor 和 verdor 包.类似 Java 的 Maven,PHP 的 Composer. Github:https:// ...

  5. golang reflect包使用解析

    golang reflect包使用解析 参考 Go反射编码 2个重要的类型 Type Value 其中Type是interface类型,Value是struct类型,意识到这一点很重要 Type和Va ...

  6. Golang : cobra 包解析

    笔者在<Golang : cobra 包简介>一文中简要的介绍了 cobra 包及其基本的用法,本文我们从代码的角度来了解下 cobra 的核心逻辑. Command 结构体 Comman ...

  7. Golang : pflag 包简介

    笔者在前文中介绍了 Golang 标准库中 flag 包的用法,事实上有一个第三方的命令行参数解析包 pflag 比 flag 包使用的更为广泛.pflag 包的设计目的就是替代标准库中的 flag ...

  8. golang标准包中文手册

    golang标准包中文手册 http://files.cnblogs.com/files/rojas/liudiwu-pkgdoc-master.zip

  9. Golang Context 包详解

    Golang Context 包详解 0. 引言 在 Go 语言编写的服务器程序中,服务器通常要为每个 HTTP 请求创建一个 goroutine 以并发地处理业务.同时,这个 goroutine 也 ...

随机推荐

  1. eureka中显示有服务但是通过ribbon调用显示No instances available for service-hello的问题

    一,问题 采取eureka集群.客户端通过Ribbon调用服务,Ribbon端报下列异常 ? 1 2 3 4 5 6 7 java.net.UnknownHostException: SERVICE- ...

  2. Excel中筛选两个表中相同的数据和快速填充一列的公式

    将两个工作表放在一个文件中,使用if函数和countif函数判断 =if(判断条件countif(区域,条件),真值,[假值]) 实例 =if(countif(Sheet2!$A$1:$A$44,A2 ...

  3. Android开发:文本控件详解——RadioButton和CheckBox(一)基本属性

    一.RadioButton和RadioGroup: RadioButton是单个的圆形单选框,而RadioGroup是可以容纳多个RadioButton存在的容器,因此RadioButton和Radi ...

  4. EAccessViolation

    Access Violation(非法访问),General Protection Fault(一般保护性错误)或者Invalid Page Fault(无效页面错误),虽然说法不一样,但本质上总是由 ...

  5. [Web] How to Test React and MobX with Jest

    转载自: https://semaphoreci.com/community/tutorials/how-to-test-react-and-mobx-with-jest?utm_content=bu ...

  6. linux中SIGHUP与nohup的关系

    SIGHUP信号与控制终端   UNIX中进程组织结构为 session (会话)包含一个前台进程组及一个或多个后台进程组,一个进程组包含多个进程.一个session可能会有一个session首进程, ...

  7. sql server中raiserror的用法(动态参数传值)

    1.raiserrror定义: 返回用户定义的错误信息并设系统标志,记录发生错误.通过使用 RAISERROR 语句,客户端可以从 sysmessages 表中检索条目, 或者使用用户指定的严重度和状 ...

  8. EChart 标题 title 样式,x轴、y轴坐标显示,调整图表位置等

    示例里工作一般情况是够用了,更复杂的可以查询教程: title 官方解说:http://echarts.baidu.com/option.html#title 坐标相关: X轴:http://echa ...

  9. Python实用日期时间处理方法汇总

    这篇文章主要介绍了Python实用日期时间处理方法汇总,本文讲解了获取当前datetime.获取当天date.获取明天/前N天.获取当天开始和结束时间(00:00:00 23:59:59).获取两个d ...

  10. 使用java计算数组方差和标准差

    使用java计算数组方差和标准差 觉得有用的话,欢迎一起讨论相互学习~Follow Me 首先给出方差和标准差的计算公式 代码 public class Cal_sta { double Sum(do ...