报告使用 context.WithCancel(context.Background()) 创建可取消上下文并立即推迟 cancel()的测试代码。
在 Go 1.24 及更高版本中,t.Context() 会返回一个在测试结束时自动取消的上下文。 这样一来,手动 WithCancel 和 defer cancel() 对就变得冗余。
示例:
func TestSomething(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
if err := work(ctx); err != nil {
t.Fatal(err)
}
}
要修正代码,请使用将 context.WithCancel 替换为 t.Context 快速修复。
在应用快速修复后:
func TestSomething(t *testing.T) {
ctx := t.Context()
if err := work(ctx); err != nil {
t.Fatal(err)
}
}