热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Go语言基础单元测试与性能测试示例详解

这篇文章主要为大家介绍了Go语言基础单元测试与性能测试示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助祝大家多多进步

概述

测试不是Go语言独有的,其实在很多语言都有测试,例如:Go、Java、Python…

要想成为一名合格的大牛,这是程序员必须具备的一项技能,特别是一些大公司,这是加分的一项,主要有如下优点:

代码可以随时测试,保证代码不会产生错误

写出更加高效的代码

单元测试

格式:func TestXXX(t *testing.T)

//add.go
package cal
func Add(num1, num2 int) int {
	return num1 + num2
}
//mul.go
package cal
func Mul(num1, num2 int) int {
	return num1 * num2
}
//add_test.go
package cal
import (
	"testing"
)
func TestAdd(t *testing.T) {
	sum := Add(10, 20)
	if sum != 30 {
		t.Log("10+20=", sum)
	}
}
func TestMul(t *testing.T) {
	sum := Mul(10, 2)
	if sum != 20 {
    t.Error("10 * 2 =", sum)
	}
}

运行结果如下:

//单元测试命令行
$ go test add_test.go add.go mul.go
ok      command-line-arguments  0.072s
$ go test -v add_test.go add.go
=== RUN   TestAdd
--- PASS: TestAdd (0.00s)
=== RUN   TestMul
--- PASS: TestMul (0.00s)
PASS
ok      command-line-arguments  0.070s
//运行指定单元测试用例
$ go test -v -run TestAdd add_test.go add.go mul.go
=== RUN   TestAdd
--- PASS: TestAdd (0.00s)
PASS
ok      command-line-arguments  0.072s

代码说明如下

第 1 行,在 go test后跟 add_test.go 件,表示测试这个文件里的所有测试用例。

第 2 行,显示测试结果,ok 测试通过,command-line-arguments 用例需要用到的一个包名,0.069s表示测试花费的时间。

第 3 行,显示在附加参数中添加了-v,可以让测试时显示详细的流程。

第 4-7 行,表示开始运行名叫 TestAdd TestMul 用例。

第 4-7 行,表示已经运行完 TestAdd TestMul试用例,PASS 表示测试成功。

第10行,表示运行指定的单元测试用例 主要加上-run 后面跟上你需要测试的函数(TestAdd)

问题

ok command-line-arguments (cached)

第一种:清除缓存 go clean -testcache

第二种:go test设置flags go test add_test.go add.go -count=1

注意

每个测试文件必须以 _test.go 结尾,不然 go test 不能发现测试文件

测试文件写在同一个包,方便测试和后期的维护

每个测试文件必须导入 testing

功能测试函数必须以 Test 开头,然后一般接测试函数的名字

testing.T 提供了几种日志输出方法

方 法 描述
Log 打印日志,同时结束测试
Logf 格式化打印日志,同时结束测试
Error 打印错误日志,同时结束测试
Errorf 格式化打印错误日志,同时结束测试
Fatal 打印致命日志,同时结束测试
Fatalf 格式化打印致命日志,同时结束测试

直接打印:Log Error Fatal

格式化打印:Logf Errorf Fatalf

性能测试

基本使用

格式:func BenchmarkXxx(*testing.B)

  //benchmark_test.go
    package cal
    import (
	"fmt"
    "testing"
  )
    func BenchmarkHello(b *testing.B) {
    	for i := 0; i 

测试结果如下:

$ go test -v -bench="." benchmark_test.go
goos: windows
goarch: amd64
BenchmarkHello-4        20000000                93.7 ns/op
PASS
ok      command-line-arguments  2.061s

代码如下说明:

第 1 行 -bench="." 表示运行 benchmark_test.go 文件里面全部的测试,其实和-run一样【 -bench regexp 是可以接收一个正则,如果要运行所以的基准测试,请使用-bench. or -bench=.'.

第 2 行 goos 表示系统是 windows

第 3 行 goarch 表示 操作系统构架是amd64

第 4 行 BenchmarkHello-4 表示 测试名称 , 20000000测试的次数 , 93.7 ns/op表示表示每一个操作耗费多少时间(纳秒)

自定义测试时间

通过-benchtime参数可以自定义测试时间,例如:

$ go test -v -benchtime=2s  -bench=. benchmark_test.go
goos: windows
goarch: amd64
BenchmarkHello-4        30000000                85.1 ns/op
PASS
ok      command-line-arguments  2.714s

当你不设置-benchtime t时,默认值是1秒

testing.B 提供了几种方法【testing.B拥有testing.T的全部接口】

方法 描述
StartTimer() 启动计时
StopTimer() 停止计时
ResetTimer 重置计时
SetBytes() 设置处理字节数
ReportAllocs() 报告内存信息
runN(n int) 运行一个基准函数

go test里面还有很多的flags表示 例如:-parallel n -cover -vet list -parallel n

以上就是Go语言基础单元测试与性能测试示例详解的详细内容,更多关于Go语言单元测试性能测试的资料请关注其它相关文章!


推荐阅读
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • 本文介绍了在Ubuntu下制作deb安装包及离线安装包的方法,通过备份/var/cache/apt/archives文件夹中的安装包,并建立包列表及依赖信息文件,添加本地源,更新源列表,可以在没有网络的情况下更新系统。同时提供了命令示例和资源下载链接。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 本文介绍了Composer依赖管理的重要性及使用方法。对于现代语言而言,包管理器是标配,而Composer作为PHP的包管理器,解决了PEAR的问题,并且使用简单,方便提交自己的包。文章还提到了使用Composer能够避免各种include的问题,避免命名空间冲突,并且能够方便地安装升级扩展包。 ... [详细]
  • 本文介绍了在CentOS 6.4系统中更新源地址的方法,包括备份现有源文件、下载163源、修改文件名、更新列表和系统,并提供了相应的命令。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
author-avatar
心胸宽大的榛子lcf
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有