Skip to content

Commit

Permalink
clarify README (#134)
Browse files Browse the repository at this point in the history
someone at Uber unfortunately spent cycles trying to convert
VerifyTestMain call to VerifyNone(t) for individual cases only to find
out that it doesn't work well with t.Parallel().

Even though VerifyNone(t)'s documentation already says this, it might be
worth clarifying this in the README since the wording can make it sound
like calling VerifyTestMain() vs calling VerifyNone() at the end of
every single test case is completely identical in behavior.
  • Loading branch information
sywhang authored Nov 21, 2024
1 parent 79b1d32 commit 4ff5fa6
Showing 1 changed file with 27 additions and 0 deletions.
27 changes: 27 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,33 @@ func TestMain(m *testing.M) {
}
```

### Note

For tests that use [t.Parallel](https://pkg.go.dev/testing#T.Parallel), `goleak` does
not know how to distinguish a leaky goroutine from tests that have not finished running.


```go
func TestA(t *testing.T) {
tt := struct{
name string
input SomeType
expected string
}{
// ...
}

for _, t := range tt {
t.Run(t.name, func(t *testing.T) {
t.Parallel() // <- goleak gets confused here!

// ...
}
}
}
```
For such cases you should also defer to using `goleak.VerifyTestMain` as shown above.

## Determine Source of Package Leaks

When verifying leaks using `TestMain`, the leak test is only run once after all tests
Expand Down

0 comments on commit 4ff5fa6

Please sign in to comment.