Skip to main content

测试

📅 2026-02-05 ✏️ 2026-03-26 CS GO

1 · 测试

1.1 · go test 命令与标志#

用法go test [build/test flags] [packages] [flags & test binary flags]

  • 对指定包做自动化测试,输出每包摘要(ok/FAIL + 耗时),失败时再打详细输出。
  • 会编译 *_test.go;以 _. 开头的文件被忽略。testdata 目录被忽略,可放测试数据。

两种模式

模式触发缓存
本地目录无包参数(go test / go test -v
包列表显式包(go test . / ./... / math

缓存:仅当仅用可缓存标志时生效(如 -run-bench-v-count-timeout 等)。禁用缓存常用 -count=1

标志go help testgo help testflag):

标志说明
编译与输出
-c只编译不运行,生成 pkg.test 二进制
-o file指定输出二进制路径
-json输出 JSON 格式(test2json 编码)
-exec xprog用 xprog 运行二进制(如 ssh remoteqemu-arm
-args之后的参数原样传给测试二进制(包列表须在 -args 前)
运行控制
-v详细输出
-short可配合 testing.Short() 跳过耗时测试
-count n执行次数;-count=1 可禁用缓存
-timeout d整个二进制超时 panic,默认 10m,0 禁用
-cpu 1,2,4按 GOMAXPROCS 组合重复运行
Test
-run regexp只运行匹配的 TestXxx(支持 / 匹配子测试)
-parallel nt.Parallel() 的最大并发数
Benchmark
-bench regexp运行匹配的基准;默认不跑,-bench . 跑全部
-benchtime t每个基准时长,默认 1s;100x 为固定 100 次
-benchmem输出内存分配统计
Fuzz
-fuzz regexp对匹配的 FuzzXxx 启用随机输入(默认只跑种子)
-fuzztime t每个模糊测试时长
分析
-cover / -covermode / -coverpkg覆盖率
-cpuprofile / -memprofile写出 profile 给 go tool pprof

对 test 二进制可用 test. 前缀,如 pkg.test -test.v -test.cpuprofile=out

go test -v -args -x                        # -args 后原样传测试二进制
pkg.test -test.v -test.cpuprofile=prof.out # 直接跑二进制时用 test. 前缀

1.2 · Mock vs. Stub#

统称 Test Double(测试替身):Dummy(填参数,从不使用)、Fake(有真实实现但走捷径,如内存数据库)、Stub、Mock。

StubMock
本质提供预设数据,替代真实依赖预设行为期望,验证交互是否发生
测试什么状态(断言被测对象的结果)行为(断言依赖是否被正确调用)
能否让测试失败不能,只辅助测试运行能,期望不满足则测试失败
例子返回假数据代替数据库查询验证邮件发送服务被调用了一次

1.3 · 测试相关库

1.4 · 更好的测试


1.5 · 参考链接

官方

Mock/Stub

技巧与可测性

演讲