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. 在交互环境下使用 Pyspark 提交任务给 Spark 解决 : java.sql.SQLException: No suitable driver

    在 jupyter 上启用 local 交互环境和 spark 进行交互使用 imapla 来帮助 spark 取数据却失败了 from pyspark.sql import SparkSession ...

  2. GEE windows 环境配置

    参照GEE开发大神的一篇文章GEE学习笔记 三十五:windows下配置本地开发环境 - 无形的风的文章 - 知乎. 按他的顺序下来还是出了点问题,再整理一下自己遇到的问题. 1.安装Google的 ...

  3. MySQL 设计与开发规范2

    目录 1. 规范背景与目的 2. 设计规范 2.1. 数据库设计 2.1.1. 库名 2.1.2. 表结构 2.1.3. 列数据类型优化 2.1.4. 索引设计 2.1.5. 分库分表.分区表 2.1 ...

  4. MongoTemplate进行增删改查

    转载自:https://blog.csdn.net/sinat_35821285/article/details/83511203#commentBox 1.首先pom.xml <!-- spr ...

  5. hangfire 实现已完成的job设置过期,防止数据无限增长

    1.添加SucceededStateExpireHandler 继承接口 IStateHandler public class SucceededStateExpireHandler : IState ...

  6. spring与springMVC的父子容器关系

    背景和概述 在spring与springMVC中通过IOC可以管理bean对象,有两个配置文件可以配置ioc spring的配置文件applicationContext.xmlspringMVC的配置 ...

  7. TrueType字体

    TrueType字形描述技术和TTF文件 TrueType字体技术的研究分析与应用 看起来上面两篇都是翻译的文档. 看微软的原文介绍: TrueType fundamentals 其他文章: 获取Tr ...

  8. Flutter入门(一)

    Flutter的sdk地址https://flutter.dev/docs/development/tools/sdk/releases 如果网络不能翻墙,只需要在环境变量里增加如下 FLUTTER_ ...

  9. ODAC Developer Downloads - Oracle Universal Installer

    https://www.baidu.com/link?url=BL2vRNMWap6AFJcmsFCEKi3KxZ2SgmtVJoihVKhF-SPgzvJHNkbk_j7nz1HdtAAWZ22NM ...

  10. vue方法中传递dom对象示例

    <div id="app"> <input type="text" v-on:keyup="onlyNum($event)" ...