🌈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 标志运行基准测试。
- 在实际使用中,应该添加对命令行参数数量的检查
💪无人扶我青云志,我自踏雪至山巅。