golang/go

cmd/vet: check for concurrent use of T.FatalX and T.SkipX

Open

#15,674 创建于 2016年5月13日

在 GitHub 查看
 (2 评论) (0 反应) (0 负责人)Go (19,008 fork)batch import
Analysishelp wanted

仓库指标

Star
 (133,883 star)
PR 合并指标
 (30 天内没有已合并 PR)

描述

The testing package is explicit about the following:

A test ends when its Test function returns or calls any of the methods FailNow, Fatal, Fatalf, SkipNow, Skip, or Skipf. Those methods, as well as the Parallel method, must be called only from the goroutine running the Test function.

However, this is easy to overlook and it is not immediately obvious that the code below is a bad test:

func TestFoo(t *testing.T) {
    go func() {
        t.Fatal("fatal") // Called from outside the Test function
    }()
    time.Sleep(1 * time.Second)
}

This outputs (what a user expects):

--- FAIL: TestFoo (1.00s)
    foo_test.go:10: fatal

Giving the user a false sense of having written correct test.

However, when running the test with the -race flag, it becomes obvious this is not okay:

==================
WARNING: DATA RACE
....
==================
--- FAIL: TestFoo (1.00s)
    foo_test.go:10: fatal

Perhaps the vet tool can check for these cases.

贡献者指南