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. nginx 日志之 access_log格式

    Nginx访问日志可以设置自定义的格式,来满足特定的需求. 示例: 示例1 log_format combined_realip '$remote_addr $http_x_forwarded_for ...

  2. PSQLException: An I/O error occurred while sending to the backend.

    postgresql批量新增数据时,批量插入的数据量太大了,造成了IO异常 只能把这么多数据先进行分割,再批量插入,但是感觉这种方式不是最优解,先暂时顶着,具体List分割方式如下: package ...

  3. linux安装yasm报错

    进入yasm-1.2.0, 输入指令 ./configure //编译yasm make && make install //安装yasm,安装完成即可. 报错信息 make[2]: ...

  4. SAS PROC MEANS 输出每个变量的描述性统计量

    ods listing close;ods output summary=class;proc means data=CC.Model_Params stackods n mean std min m ...

  5. vue中select设置默认选中

    vue中select设置默认选中 一.总结 一句话总结: 通过v-model来:select上v-model的值为option默认选中的那项的值(value) 二.select设置默认选中实例 < ...

  6. java定时任务框架Quartz入门与Demo搭建

  7. poi导出word表格跨行

    DataCommon.java package com.ksource.pwlp.model.statistic; public class DataCommon { private Long id; ...

  8. 推荐一个web字体转换工具TTF转SVG

    推荐一个web字体转换工具:https://www.fontsquirrel.com/tools/webfont-generator

  9. os.environ详解

    我们想要用Python获得一些有关系统的各种信息的时候就不得不想到os的environ,那这里面都具体包含了那些内容呢? 简介 对于官方的解释,environ是一个字符串所对应环境的映像对象.这是什么 ...

  10. Django的分页器 paginator

    导入 from django.core.paginator import Paginator,EmptyPage,PageNotAnInteger Page对象 Paginator.page()将返回 ...