应用以下补丁可以说明问题:
diff --git a/src/go/format/benchmark_test.go b/src/go/format/benchmark_test.go
index 7bd45c0e95..62131e0977 100644
--- a/src/go/format/benchmark_test.go
+++ b/src/go/format/benchmark_test.go
@@ -58,6 +58,7 @@ var tests = []struct {
}
func BenchmarkFormat(b *testing.B) {
+ b.Logf("foo") // <<< not reported
var src bytes.Buffer
for _, t := range tests {
src.Reset()
@@ -74,6 +75,7 @@ func BenchmarkFormat(b *testing.B) {
}
b.Run(fmt.Sprintf("%s-%d", t.name, t.n), func(b *testing.B) {
+ b.Logf("foo") // <<< reported
b.SetBytes(int64(len(data)))
b.ReportAllocs()
b.ResetTimer()
当运行此基准测试时,外部的 b.Logf 调用不会在输出中报告。
我本以为会看到两者都有。
1条答案
按热度按时间ntjbwcob1#
感谢 @griesemer 提交这份报告,很抱歉我们没有在 Go1.13 周期内处理这个问题!
实际上,这个 bug 是由于我们没有遵循 b.Logf(
) 的承诺导致的,而子基准测试遵循输出总是会被记录的承诺。
如果你设置了
-v
,它将被打印出来。这种行为似乎是在 CL https://go-review.googlesource.com/c/go/+/21504/ 中引入的,尤其是我认为这一行可能是原因所在:go/src/testing/benchmark.go 文件中的第 244 行
| | ifb.chatty&& (len(b.output) >0||b.finished) { |
将其更新为
会产生正确的效果,不会使现有的测试失败。你怎么看 @mpvl?我们应该把这个问题推迟到 Go1.14 并标记为
Early-In-Cycle
,还是可以在 Go1.13 中添加它?