testpackage is a golang linter that makes you use a separate _test
package.
According to blackbox testing approach, you should not use unexported functions and methods from source code in tests.
Go allows to place tests in a separate package with suffix _test
.
For example, tests for store
package can be in the same package or in the package store_test
.
In the second case, you have to import the source code into tests so only exported things are available.
The linter reports if a test is in a package without suffix _test
.
If you really need to test unexported function, then put the test into file XXX_internal_test.go
.
The linter skips such files by default.
It also skips the file export_test.go
by default (see the last article below).
More detailed articles on this topic:
- Next level Go testing by Tit Petric
- 5 simple tips and tricks for writing unit tests in #golang by Mat Ryer
- 5 advanced testing techniques in Go by Alan Braithwaite
- Golang Trick: Export unexport method for test by lysu
The best way is to use golangci-lint. It includes testpackage linter started from v1.25.0 and higher.
See install section of readme.
testpackage is disabled by default. To enable it, add the following to your .golangci.yml
:
linters:
enable:
testpackage
You can also change regexp that is used to ignore files by the linter. Here is the default value.
linters-settings:
testpackage:
skip-regexp: (export|internal)_test\.go
golangci-lint run
go get -u github.com/maratori/testpackage
testpackage ./...
or
testpackage -skip-regexp="^$" ./...
testpackage -help
testpackage: linter that makes you use a separate _test package
Usage: testpackage [-flag] [package]
Flags: -V print version and exit
-skip-regexp string
regexp pattern to skip file by name. To not skip files use -skip-regexp="^$" (default "(export|internal)_test\\.go")
-json
emit JSON output
-c int
display offending line with this many lines of context (default -1)
-cpuprofile string
write CPU profile to this file
-memprofile string
write memory profile to this file
- No changes in linter behavior
- Use latest go version on travis-ci
- Update Makefile
- Update golangci-lint
- Go Analyzer to check the name of test package
- main.go to run the analyzer
- MIT license