Reputation: 4513
I'm creating a simple test within my package directory called reverseTest.go
package main
import "testing"
func TestReverse(t *testing.T) {
cases := []struct {
in, want string
}{
{"Hello, world", "dlrow ,olleH"},
{"Hello, 世界", "界世 ,olleH"},
{"", ""},
}
for _, c := range cases {
got := Reverse(c.in)
if got != c.want {
t.Errorf("Reverse(%q) == %q, want %q", c.in, got, c.want)
}
}
}
whenever i try to run it the output is
exampleFolder[no test files]
this is my go env
GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/juan/go"
GORACE=""
GOROOT="/usr/lib/go"
GOTOOLDIR="/usr/lib/go/pkg/tool/linux_amd64"
TERM="dumb"
CC="gcc"
GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread"
CXX="g++"
CGO_ENABLED="1"
Any help will be greatly appreciated. Thanks!!
Upvotes: 141
Views: 125809
Reputation: 445
Mine was resolved by adding os.Exit(m.Run())
at the end of TestMain(m *testing.M)
function.
Upvotes: -2
Reputation: 1
I'm also occur this question. When I remove func TestMain(t *testing.T)
, it works ok!
Upvotes: -1
Reputation: 21
no test files
mean you need to rename your test file to reflect the file you want to test.
Example
main.go
main_test.go
Where main.go is the file containing your code. main_test.go is the file containing your test code.
Upvotes: 1
Reputation: 2867
To run all the tests use below command
> go test ./...
//For verbose output use -v flag
> go test -v ./...
Upvotes: 11
Reputation: 1
I faced same problem. I fixing them by appending various packages
go test -v ./ ./2ndpackage ./3rdpackage ./4thpackages
this solved the issue.
Also I added "_" between Test keyword and function name Test_FuncName
Upvotes: 0
Reputation: 36279
Files containing tests should be called name_test
, with the _test
suffix. They should be alongside the code that they are testing.
To run the tests recursively call go test -v ./...
From How to Write Go Code:
You write a test by creating a file with a name ending in
_test.go
that contains functions namedTestXXX
with signaturefunc (t *testing.T)
. The test framework runs each such function; if the function calls a failure function such ast.Error
ort.Fail
, the test is considered to have failed.
Upvotes: 201
Reputation: 5745
It's possible you don't have any test files in the root package and running go test -v
does not test sub-packages, only the root package.
For example
.
├── Dockerfile
├── Makefile
├── README.md
├── auth/
│ ├── jwt.go
│ ├── jwt_test.go
├── main.go
As you see there are no test files in the root package, only the main.go file. You will get "no test files."
The solution is to test all packages within the current working directory, recursively
go test -v ./...
Or if you use govendor
govendor test +local
Or you can specify which package (directory) to test
go test -v ./packagename
Or test a package recursively
go test -v ./packagename/...
Upvotes: 138
Reputation: 474
I faced same problem.
In addition to previous answers i find an issue when impossible to run test if your package's folder name is testing
.
Terminal demonstration of the issue below:
with testing
folder name:
~/go/src/testing$ go test
? testing [no test files]
without testing
folder name:
~/go/src/testing_someothername$ go test
PASS
ok testing_someothername 0.089s
In my case it was helpful
Upvotes: 4
Reputation: 5264
Your test function within your _test file must start with the prefix "Test"
GOOD:
func TestName (
BAD:
func NameTest (
This function will not be executed as a test and results with the reported error
Upvotes: 22