How to run test cases in a specified file?

Issue

My package test cases are scattered across multiple files, if I run go test <package_name> it runs all test cases in the package.

It is unnecessary to run all of them though. Is there a way to specify a file for go test to run, so that it only runs test cases defined in the file?

Solution

There are two ways. The easy one is to use the -run flag and provide a
pattern matching names of the tests you want to run. Example:

go test packageName -run NameOfTest

See the docs for more info.
Note that the -run flag may also run other tests if they contain the string
NameOfTest, as the -run flag matches a regexp. So to ensure that only a
test named exactly ‘NameOfTest’ is run, one has to use the regexp ^NameOfTest$:

go test -run "^NameOfTest$" 

The other way is to name the specific file, containing the tests you want to run:

go test -v foo_test.go

But there’s a catch. This works well if:

  • foo.go is in package foo.
  • foo_test.go is in package foo_test and imports ‘foo’.

If foo_test.go and foo.go are the same package (a common case) then you
must name all other files required to build foo_test. In this example it
would be:

go test foo_test.go foo.go

I’d recommend to use the -run pattern. Or, where/when possible, always run
all package tests.

Answered By – zzzz

Answer Checked By – Gilberto Lyons (GoLangFix Admin)

Leave a Reply

Your email address will not be published.