当前位置: 首页 > article >正文

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

挪威特罗姆瑟夜景

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

📗概念

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

💻代码

Example

package main

import (
	"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 int
		want 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 main

import (
    "fmt"
    "testing"
)

// 示例函数
func Add(a, b int) int {
    return a + b
}

// 单元测试
func TestAdd(t *testing.T) {
    got := Add(2, 3)
    want := 5
    if 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 main

import (
	"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.kler.cn/a/393041.html

相关文章:

  • 06.VSCODE:备战大项目,CMake专项配置
  • 车-路-站-网”信息耦合的汽车有序充电
  • LabVIEW开发相机与显微镜自动对焦功能
  • GIS空间分析案例---城市公共设施配置与服务评价
  • 深入理解接口测试:实用指南与最佳实践5.0(一)
  • 修改yolo格式的labels类别、删除yolo格式的labels类别
  • Kafka参数了解
  • Find My电子体温计|苹果Find My技术与体温计结合,智能防丢,全球定位
  • PostgreSQL序列:创建、管理与高效应用指南
  • [ Linux 命令基础 7 ] Linux 命令详解-磁盘管理相关命令
  • 《高级 SQL 技巧:提升查询效率与灵活性》
  • Bootstrap和jQuery开发案例
  • 动态规划 —— 子数组系列-环形子数组的最大和
  • react中如何在一张图片上加一个灰色蒙层,并添加事件?
  • C#进阶-快速了解IOC控制反转及相关框架的使用
  • 2024-09-01 - 分布式集群网关 - LoadBalancer - 阿里篇 - 流雨声
  • Spring Boot项目的配置文件有哪些?加载优先级谁最高?配置优先级谁最高?
  • <项目代码>YOLOv8 草莓成熟识别<目标检测>
  • 昇思25天学习打卡营第1天|快速入门
  • DBeaver 连接 OceanBase Oracle 租户
  • Spring框架之观察者模式 (Observer Pattern)
  • 全球经济风雨飘摇,OJK能带领印尼金融创新走多远?
  • 更改Ubuntu22.04锁屏壁纸
  • Unity 性能优化方案
  • docker overlay磁盘空间过高的处理方案
  • 网络技术-网桥模式