使用*testing.T的t.Log、t.Logf和t.Run可记录测试日志并分组,配合go test -v查看输出。1. t.Log/t.Logf输出信息,失败或-v时显示;2. t.Run创建子测试,日志归属清晰;3. 可结合t.Skip在特定条件下跳过测试并保留日志;4. 使用-v参数查看完整日志,提升调试效率。

在Go语言中,使用*testing.T不仅可以执行断言和控制测试流程,还能记录测试过程中的信息,帮助开发者调试和理解测试执行情况。下面介绍几种常用的记录测试信息的方法,并给出具体示例。
在测试函数中,可以通过 t.Log 或 t.Logf 输出任意信息。这些信息默认在测试失败时才会显示,但如果使用 go test -v,则无论成败都会输出。
func TestAdd(t *testing.T) {
a, b := 2, 3
result := a + b
t.Log("开始计算:", a, "+", b)
t.Logf("期望值: %d, 实际值: %d", 5, result)
if result != 5 {
t.Errorf("Add(%d, %d) = %d; expected 5", a, b, result)
}
}
运行命令:go test -v
你会看到 t.Log 和 t.Logf 的输出内容。
当使用子测试(Subtests)时,每个 t.Run 会创建独立的作用域,日志信息会自然归属于对应的测试用例。
<pre class="brush:php;toolbar:false;">func TestMathOperations(t *testing.T) {
t.Run("subtest_addition", func(t *testing.T) {
t.Log("正在测试加法...")
if 2+2 != 4 {
t.Error("加法错误")
}
})
t.Run("subtest_multiplication", func(t *testing.T) {
t.Log("正在测试乘法...")
if 3*3 != 9 {
t.Error("乘法错误")
}
})
}
这样组织测试,日志会清晰地对应到各自的子测试中,便于排查问题。
立即学习“go语言免费学习笔记(深入)”;
有时候你想输出很多中间状态,但又不希望成功时刷屏。可以先用 t.Log 记录,只在失败时才显示。
<pre class="brush:php;toolbar:false;">func TestDivide(t *testing.T) {
numerator := 10
denominator := 0
var result float64
t.Log("输入参数:", numerator, "/", denominator)
if denominator == 0 {
t.Log("检测到除零,跳过计算")
t.Skip("除零操作不支持")
}
result = float64(numerator) / float64(denominator)
t.Logf("计算完成,结果: %f", result)
if result != 5 {
t.Errorf("期望结果为5,实际为%f", result)
}
}
注意:这里用了 t.Skip 跳过无效测试,日志仍会被记录用于分析。
要看到所有 t.Log 的内容,记得运行测试时加上 -v 标志:
<code>go test -v ./...
否则,只有测试失败时才会打印日志信息。
基本上就这些。合理使用 t.Log、t.Logf 和子测试,能让测试更透明,出错时更容易定位问题。不复杂但容易忽略。
以上就是Golang使用testing.T记录测试信息示例的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号