tparagen insert testing/T.Parallel()
in a test function in a specific source file or in an entire directory.
To run go tests in parallel, you need to insert testing/T.Parallel()
into the main/sub test you want to run in parallel.
func SampleTest(t *testing.T) {
t.Parallel()
testCases := []struct {
name string
}{{name: "foo"}}
for _, tc := range testCases {
t.Run(tc.name, func(x *testing.T) {
x.Parallel()
// do anything...
})
}
}
If there is your application in production already, you must add a testing/T.Parallel()
into any main/sub test. It is a very time-consuming and tedious task.
tparagen is cli tool for insert testing/T.Parallel()
into all main/sub test in specified directory.
Before code is below,
package sample
import (
"fmt"
"testing"
)
func SampleTest(t *testing.T) {
testCases := []struct {
name string
}{{name: "foo"}}
for _, tc := range testCases {
t.Run(tc.name, func(x *testing.T) {
fmt.Println(tc.name)
})
}
}
After execute tparagen
, modified code is below.
package test
import (
"fmt"
"testing"
)
func SampleTest(t *testing.T) {
t.Parallel()
testCases := []struct {
name string
}{{name: "foo"}}
for _, tc := range testCases {
t.Run(tc.name, func(x *testing.T) {
x.Parallel()
fmt.Println(tc.name)
})
}
}
package test
import (
"fmt"
"testing"
)
func SampleTest(t *testing.T) {
t.Parallel()
testCases := []struct {
name string
}{{name: "foo"}}
for _, tc := range testCases {
tc := tc
t.Run(tc.name, func(x *testing.T) {
x.Parallel()
fmt.Println(tc.name)
})
}
}
- Insert RunParallel helper function into the main/sub test function.
- Loop variables are not re-initialised if the minimum version of Go is less than 1.22
- Do not insert if
t.Setenv()
is called in the test function - Ignore specified directories with cli option -i/-ignore
- nolint comment support: parallel,paralleltest
- Don't insert if the test function calls another function that calls
Setenv()
.
$ tparagen
$ tparagen --help
usage: tparagen [<flags>]
Flags:
--[no-]help Show context-sensitive help (also try --help-long and --help-man).
--ignore=IGNORE ignore directory names. ex: foo,bar,baz (testdata directory is always ignored.)
--min-go-version=1.21 minimum go version
go install github.com/sho-hata/tparagen/cmd/tparagen@latest
- Fork (https://github.com/sho-hata/tparagen/fork)
- Create a feature branch
- Commit your changes
- Rebase your local changes against the master branch
- Run test suite with the
go test ./...
command and confirm that it passes - Run
gofmt -s
- Create new Pull Request