Zhonghui

每个不曾起舞的日子,都是对生命的辜负

User Tools

Site Tools


程序:go:测试

Table of Contents

Go Test


测试命令

go test # 最基础的使用方式,测试一个Package

代码演示

/magic_math/basic.go

package magic_math
 
import (
	"math/rand"
	"time"
)
 
func Add(x, y int32) int32 {
	r := rand.New(rand.NewSource(time.Now().UnixNano()))
 
	if x == 0 && y == 0 {
		return int32(r.Intn(2))
	} else {
		return x + y
	}
}

/magic_math/basic_test.go

// 测试文件的命名:*_test.go,在go build的时候会被忽略
 
// package name有两种选择
// 1. 和其他普通go文件保持一致,这样可以访问package内部非公开函数,白盒测试
package magic_math
 
// 2. 使用原本的包名加上"_test",比如"magic_math_test"
// 这样就只能访问公开函数了,黑盒测试
// package magic_math_test
 
// 必须的
import "testing"
 
// 测试函数的名字必须以Test开头,可选的后缀名必须以大写字母开头
func TestAdd(t *testing.T) {
	// 给出几组测试数据,如果出错了就报告
	if Add(1, 1) != 2 {
		t.Error("1 + 1 = 2")
	}
	if Add(0, 0) != 0 {
		t.Error("0 + 0 = 0")
	}
}
 
// 基准测试函数和普通测试函数写法类似
// 但是以Benchmark为前缀名,并且带有一个*testing.B类型的参数
func BenchmarkAdd(b *testing.B) {
	// b自带了一个参数N表示测试次数
	for i := 0; i < b.N; i++ {
		Add(0, 0)
	}
}
 
// 默认情况下不运行任何基准测试
// 执行Benchmark的方式(Benchmark路径和上面普通test的路径写法一样)
// go test -bench=.   # 匹配所有Benchmark函数,都执行
// go test -bench=Add # 执行BenchmarkAdd函数
// 再加上这个参数[-benchmem],可以记录内存使用
/var/www/DokuWikiStick/dokuwiki/data/pages/程序/go/测试.txt · Last modified: 2025/07/08 08:37 by zhonghui