27_模块包与测试入门
把代码组织为包,编写最小单元测试并运行工具链。
Go 基础专题 27:模块、包与测试入门
学习目标:把代码组织为包,编写最小单元测试并运行工具链。
核心知识
同一目录下的普通 .go 文件通常属于同一个包;模块由 go.mod 定义导入路径。包名建议简短且表达职责,如 notes。其他包只能访问大写开头的标识符。go mod tidy 会整理依赖声明;添加依赖后要提交 go.mod 和 go.sum,以便重建环境。
下面是两个同目录文件的示例,先保存第一段为 math.go,第二段为 math_test.go:
package mathdemo
func Add(a, b int) int { return a + b }
package mathdemo
import "testing"
func TestAdd(t *testing.T) {
if got := Add(2, 3); got != 5 {
t.Fatalf("Add(2,3) = %d, want 5", got)
}
}
运行 go test ./...。测试函数名以 Test 开头并接收 *testing.T;失败用 t.Error 或 t.Fatal 报告。测试应覆盖正常值、边界值和失败路径,而不仅仅重复函数里的表达式。需要多个输入时可用表驱动测试;涉及并发可再运行 go test -race ./...。
逐步理解
先确保 math.go 和 math_test.go 在同一目录、包名一致,再运行 go test ./...。测试只检查一个正常例子很容易漏掉边界;把输入、预期写成表,逐行运行可扩充覆盖。go.mod 记录模块身份和依赖关系,go.sum 记录模块校验信息;两者都属于可复现构建的一部分。
动手练习
练习:给 Add 增加负数和零的测试用例。答案要点:检查 Add(-2, 2)==0 与 Add(0, 0)==0。