【go从零单排】go语言中testing的几种类型

ops/2024/11/14 5:49:07/

挪威特罗姆瑟夜景

🌈Don’t worry , just coding!
内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。

📗概念

Go 语言中的 testing 包是用于编写和运行测试的标准库。它提供了丰富的功能,帮助开发者创建单元测试、基准测试以及示例测试。

💻代码

Example

package mainimport ("fmt""testing" //testing:提供测试功能的包,包含了编写和运行测试所需的工具。
)// IntMin 函数接受两个整数 a 和 b,返回较小的那个值。
func IntMin(a, b int) int {if a < b {return a}return b
}// TestIntMinBasic 是一个基本的测试用例,测试 IntMin(2, -2) 的返回值是否为 -2。
// 如果返回值不符合预期,使用 t.Errorf 记录错误信息。
func TestIntMinBasic(t *testing.T) {ans := IntMin(2, -2)if ans != -2 {t.Errorf("IntMin(2, -2) = %d; want -2", ans)}
}// TestIntMinTableDriven 是一个表驱动测试,用于测试多个输入情况。
func TestIntMinTableDriven(t *testing.T) {//定义了一个结构体数组 tests,每个结构体包含两个输入值 a 和 b,以及期望的返回值 want。var tests = []struct {a, b intwant int}{{0, 1, 0},{1, 0, 0},{2, -2, -2},{0, -1, -1},{-1, 0, -1},}for _, tt := range tests {testname := fmt.Sprintf("%d,%d", tt.a, tt.b)//用 t.Run 方法为每个测试用例创建一个子测试,便于独立运行和报告结果。t.Run(testname, func(t *testing.T) {//在循环中,调用 IntMin 函数,并检查返回值是否与预期相符。ans := IntMin(tt.a, tt.b)if ans != tt.want {t.Errorf("got %d, want %d", ans, tt.want)}})}
}// BenchmarkIntMin 是一个基准测试,用于测量 IntMin 函数的性能。
func BenchmarkIntMin(b *testing.B) {//b.N 是基准测试框架自动确定的迭代次数,循环调用 IntMin(1, 2),以测量其执行时间。for i := 0; i < b.N; i++ {IntMin(1, 2)}
}

Example2

package mainimport ("fmt""testing"
)// 示例函数
func Add(a, b int) int {return a + b
}// 单元测试
func TestAdd(t *testing.T) {got := Add(2, 3)want := 5if got != want {t.Errorf("Add(2, 3) = %d; want %d", got, want)}
}// 基准测试
func BenchmarkAdd(b *testing.B) {for i := 0; i < b.N; i++ {Add(2, 3)}
}// 示例测试
func ExampleAdd() {fmt.Println(Add(2, 3))// Output: 5
}

命令行参数

package mainimport ("fmt""os"
)func main() {argsWithProg 包含所有命令行参数,包括程序名称。argsWithProg := os.Args //os.Args 是一个字符串切片,包含命令行参数。第一个元素是程序的名称,后面的元素是传递给程序的参数//argsWithoutProg 通过切片操作 os.Args[1:] 获取不包含程序名称argsWithoutProg := os.Args[1:]//这行代码尝试获取第四个命令行参数(索引为 3),并将其赋值给变量 arg。arg := os.Args[3] //注意:如果命令行参数不足四个,这行代码会导致运行时错误(index out of range)。fmt.Println(argsWithProg)fmt.Println(argsWithoutProg)fmt.Println(arg)
}

🔍理解

  • 使用 testing.T 类型来进行单元测试,提供了报告错误和失败的功能。
  • 使用 testing.B 类型来编写基准测试,测量代码的性能和执行时间。
  • 使用 t.Error 或 t.Errorf 方法报告错误。
  • 使用 t.Skip 方法跳过某个测试。
  • 使用 go test 命令运行测试
  • 使用 -bench 标志运行基准测试。
  • 在实际使用中,应该添加对命令行参数数量的检查

💪无人扶我青云志,我自踏雪至山巅。
在这里插入图片描述


http://www.ppmy.cn/ops/133473.html

相关文章

常用服务部署

elasticsearch单机版部署 es-cluster.yamlfilebeat.ymllocal-pv.yaml elasticsearch集群部署 es-cluster.6.ymles-cluster.yamles-cluster-single.yamlfilebeat.ymllocal-pv.yaml firefly部署 filebeat.ymlfirefly.yml grafana部署 grafana.ymllocal-pv.yaml filebeat部…

C++ 内存分布及 new , delete 分配问题( ~~~ 面试重要 ~~~)

文章目录 前言一、内存分布二、new 、delete 分配问题总结 前言 本篇文章笔者将会对 C 中的内存问题简单的讲解 , 同时对 new , delete 的面试题进行重点讲解. 一、内存分布 ● C语言和C 分布情况是一样的, 如下 : ● 栈 ○ 栈 的管理是由编译器自动管理 , 不需要我们人为做…

测试实项中的偶必现难测bug--<pre>标签问题

问题描述: 用户从网上copy的简介信息可能带有<pre>标签,导致安卓上的内容只能一行滑动展示,但是ios有对这个标签做特殊处理: 分析: <pre> 标签是 HTML 中用于表示预格式化文本的标签,它的作用是保留文本中的空格、换行和缩进。它的全称是 preformatted text…

【OceanBase 诊断调优】—— OceanBase 数据库统计信息被禁用,状态为 broken 的原因和解决方法

问题现象 因为人为因素导致部分统计信息函数未安装&#xff0c;自动统计信息触发执行长期失败。重新安装统计信息相关函数后&#xff0c;发现仍然无法正常自动统计信息收集&#xff0c;统计信息状态为 broken。 问题原因 统计信息 JOB 收集失败次数达到 16 次会直接禁用 JOB …

选择排序法——堆排序

任务描述 本关任务&#xff1a;完成建堆、排序调整及输出排序结果的函数。 相关知识 为了既要保存中间比较结果&#xff0c;减少后面的比较次数&#xff0c;又不占用大量的附加存储空间&#xff0c;使选择排序算法具有较好的性能&#xff0c;Willioms和Floyd在1964年提出的称为…

PostgreSQL 日志文件备份

随着信息安全的建设&#xff0c;在三级等保要求中&#xff0c;要求日志至少保留半年 180 天以上。那么 PostgreSQL 如何实现这一要求呢。 我们需要配置一个定时任务&#xff0c;定时的将数据库日志 log 下的文件按照生成的规则将超过一定时间的日志拷贝到其它的路径下&#xf…

HTML之图片和超链接的学习记录

图片 在HTML中&#xff0c;我们可以使用img标签来显示一张图片。对于img标签&#xff0c;我们只需要掌握它的三个属性&#xff1a;src、alt和title。 <img src"" alt"" title"" /> src用于指定图片所在的路径&#xff0c;这个路径可以是…

django博客项目实现站内搜索功能

Django博客站内搜索功能实现 1. 准备工作 确保Django项目已经创建好&#xff0c;并且有一个用于存储博客文章的模型&#xff08;例如Post&#xff09;。 2. 定义搜索表单 在应用目录下创建一个forms.py文件&#xff0c;定义一个搜索表单。 from django import formsclass …