转-Golang语言-- Test Case
时间:2022-05-05
本文章向大家介绍转-Golang语言-- Test Case,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1. 简介
Go 语言中自带有一个轻量级的测试框架 testing 和自带的 go test 命令来实现单元测试和性能测试。
2. 要求
- 文件名必须是`_test.go`结尾的,这样在执行`go test`的时候才会执行到相应的代码
- 你必须 import `testing`这个包
- 所有的测试用例函数必须是`Test`开头
- 测试用例会按照源代码中写的顺序依次执行
- 测试函数`TestXxx()`的参数是`testing.T`,我们可以使用该类型来记录错误或者是测试状态
- 测试格式:`func TestXxx (t *testing.T)`,`Xxx`部分可以为任意的字母数字的组合,但是首字母不能是小写字母[a-z],例如`Testintdiv`是错误的函数名。
- 函数中通过调用`testing.T`的`Error`, `Errorf`, `FailNow`, `Fatal`, `FatalIf`方法,说明测试不通过,调用`Log`方法用来记录测试的信息。
3. 案例
gotest.go
package gotest
import ( "errors")
func Division(a, b float64) (float64, error) { if b == 0 { return 0, errors.New("除数不能为0")
} return a / b, nil
}
View Code
gotest_test.go
package gotest
import ( "testing")
func Test_Division_1(t *testing.T) { if i, e := Division(6, 2); i != 3 || e != nil {
t.Error("除法函数测试没通过")
} else {
t.Log("第一个测试通过")
}
}
func Test_Division_2(t *testing.T) {
t.Error("就是不通过")
}
View Code
4. 压力测试
- 压力测试用例必须遵循如下格式,其中 XXX 可以是任意字母数字的组合,但是首字母不能是小写字母
- func BenchmarkXXX(b *testing.B) { ... }
- go test 不会默认执行压力测试的函数,如果要执行压力测试需要带上参数-test.bench,语法:-test.bench="test_name_regex",例如 go test -test.bench=".*"表示测试全部的压力测试函数
- 在压力测试用例中,请记得在循环体内使用 testing.B.N,以使测试可以正常的运行文件名也必须以_test.go 结尾
5. 案例
webbench_test.go
package gotest
import ( "testing")
func Benchmark_Division(b *testing.B) { for i := 0; i < b.N; i++ {
Division(4, 5)
}
}
func Benchmark_TimeConsumingFunction(b *testing.B) {
b.StopTimer()
b.StartTimer() for i := 0; i < b.N; i++ {
Division(4, 5)
}
}
View Code
命令行执行: go.exe test -test.bench=.*
- Redis+TwemProxy(nutcracker)集群方案部署记录
- 金融科技新常态,未来开启拼“硬实力”阶段
- Mono 3 的默认Gc是Sgen
- Linux下Redis主从复制以及SSDB主主复制环境部署记录
- 单元测试同时支持 NUnit/MSTest
- log4net快速上手
- MySQL高可用方案-PXC环境部署记录
- Redis主从复制下的工作原理梳理
- Linux系统下常用的数据备份方法
- K2 的Workspace 遭遇400 RequestLength 错误修复
- 从零开始学人工智能-Python·决策树(三)·节点
- .net程序员使用Oracle新手上路指南
- python的函数(二):作用域
- 在win2008 r2中安装windows phone 7开发工具
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 百行代码轻松爬取视频
- WebLogic coherence UniversalExtractor 反序列化 (CVE-2020-14645) 漏洞分析
- equals和hashCode你学会了么?
- 15 张精美动图全面讲解 CORS
- Rasa X 安装之Docker Compose 模式
- 使用Vue写个首页,原来这么简单
- 5分钟内搭建你的第一个Python聊天机器人
- dotnet 获取进程命令行参数的工具
- SpringFramework之ViewResolver优化
- 搭建maven私服上传并使用Jar包
- Prometheus监控Minio集群
- Spring Boot 相关漏洞学习资料
- 口令爆破之突破前端JS加密
- 渗透测试之API测试技巧
- PC(C/S架构)客户端测试笔记