testpackage

command module
v1.1.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 6, 2023 License: MIT Imports: 2 Imported by: 0

README

testpackage
go.mod version CI Codecov Codebeat Maintainability Go Report Card License Go Reference

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 and a lot of other great linters.

Install

See official site.

Configuration

testpackage is disabled by default. To enable it, add the following to your .golangci.yml:

linters:
  enable:
    testpackage

You can also change the regexp that is used to ignore files by the linter, and the list of packages that are allowed by default.

Here are the default values:

linters-settings:
  testpackage:
    skip-regexp: (export|internal)_test\.go
    allow-packages:
      - main
Run
golangci-lint run

Usage as standalone linter

Install
go install 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:
  -skip-regexp string
        regexp pattern to skip file by name. To not skip files use -skip-regexp="^$" (default "(export|internal)_test\\.go")
  -allow-packages string
        comma separated list of packages that don't end with _test that tests are allowed to be in (default "main")
  -V    print version and exit
  -c int
        display offending line with this many lines of context (default -1)
  -cpuprofile string
        write CPU profile to this file
  -debug string
        debug flags, any subset of "fpstv"
  -fix
        apply all suggested fixes
  -flags
        print analyzer flags in JSON
  -json
        emit JSON output
  -memprofile string
        write memory profile to this file
  -test
        indicates whether test files should be analyzed, too (default true)
  -trace string
        write trace log to this file

Contributors

Changelog

[v1.1.1] - 2023-03-07
Changed
  • Update golang to 1.20
  • Update dependencies
  • Update golangci-lint to v1.51.2
  • Update Makefile
[v1.1.0] - 2022-06-22
Changed
  • Allow tests in main package by default and add flag -allow-packages to allow tests without _test suffix (thanks G-Rath)
  • Update golang to 1.18
  • Migrate to github actions from travis-ci
  • Update golangci-lint to v1.46.2
[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

Documentation

Overview

testpackage is 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:

Directories

Path Synopsis
pkg

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL