Skip to content

Golang linter that encourages you to use a separate _test package

License

Notifications You must be signed in to change notification settings

micheartin/testpackage

 
 

Repository files navigation

testpackage
Build Status codecov codebeat badge Maintainability Go Report Card GitHub GoDoc

testpackage is a golang linter that makes you use a separate _test package.

Motivation

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:

Usage

The best way is to use golangci-lint. It includes testpackage linter started from v1.25.0 and higher.

Install

See install section of readme.

Configuration

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

Run

golangci-lint run

Usage as standalone linter

Install

go get -u github.com/maratori/testpackage

Run

testpackage ./...

or

testpackage -skip-regexp="^$" ./...

Command line arguments

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

Changelog

[v1.0.1] - 2020-04-22

Changed

  • No changes in linter behavior
  • Use latest go version on travis-ci
  • Update Makefile
  • Update golangci-lint

[v1.0.0] - 2019-11-10

Added

  • Go Analyzer to check the name of test package
  • main.go to run the analyzer
  • MIT license

About

Golang linter that encourages you to use a separate _test package

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Go 86.5%
  • Makefile 13.5%