t.Log用于测试中输出不影响结果的日志,需加-v参数才可见,适合记录中间状态等;t.Errorf则标记测试失败但继续执行;t.Logf提供更灵活的格式化输出。

在 Go 的测试中,t.Log 是调试和理解测试执行过程的重要工具。它不会影响测试结果(无论成功或失败),但会在测试运行时输出日志信息,尤其在使用 go test -v 时可见。
什么时候用 t.Log?
适合记录测试中的中间状态、输入输出、关键分支判断等辅助信息,比如:
- 函数调用前后的参数和返回值
- 循环中每次迭代的变量值
- 条件分支进入的具体路径(如
if err != nil被触发时) - 模拟依赖行为时的“打点”日志(如 mock 数据生成)
t.Log 和 t.Errorf 的区别
t.Log 只是输出信息,不标记测试失败;而 t.Errorf 会记录错误并让测试以失败状态结束(但继续执行后续语句)。两者可共存:
示例:
立即学习“go语言免费学习笔记(深入)”;
func TestDivide(t *testing.T) {
result, err := divide(10, 0)
t.Log("尝试除零:", 10, "/", 0) // 总会打印
if err != nil {
t.Log("捕获到预期错误:", err) // 辅助说明
t.Errorf("期望无错,但得到:%v", err) // 导致测试失败
}
}
让日志真正可见:必须加 -v 参数
默认情况下,go test 不显示 t.Log 输出。要看到它们,需显式启用详细模式:
-
go test -v:显示所有测试函数名 + 其t.Log内容 -
go test -v -run=^TestDivide$:只运行并显示指定测试的日志 -
go test -v -failfast:遇到第一个失败就停,但仍显示已执行测试的日志
替代方案:t.Logf 格式化更灵活
当需要拼接字符串或格式化数值时,t.Logf 比 t.Log 更简洁:
t.Log("count:", i, "value:", v)-
t.Logf("count: %d, value: %s", i, v)—— 更易读、支持类型格式化
注意:t.Logf 同样需要 -v 才可见,且不改变测试结果。










