92

The directory structure is :

srcsrc/pkgsrc/pkg/t1.gosrc/pkg/t1_test.go

t1.go

package pkgimport ("fmt")func SayHI(){    fmt.Println("this is t1")}

t1_test.go

package pkgimport (    "testing")func TestXYZ(t *testing.T) {    SayHI()}

Invoke go test from command line at dirsrc/pkg

go test t1_test.go


error:

./t1_test.go:8: undefined: SayHIFAIL    command-line-arguments [build failed]

but the function is there

thanks for any hints

Nathan Wailes's user avatar
Nathan Wailes
12.6k10 gold badges76 silver badges118 bronze badges
askedFeb 6, 2013 at 6:49
davyzhang's user avatar
2

5 Answers5

80

It is working as intended.

jnml@fsc-r630:~/src/pkg$ go help testusage: go test [-c] [-i] [build flags] [packages] [flags for test binary]'Go test' automates testing the packages named by the import paths.It prints a summary of the test results in the format:    ok   archive/tar   0.011s    FAIL archive/zip   0.022s    ok   compress/gzip 0.033s    ...followed by detailed output for each failed package.'Go test' recompiles each package along with any files with names matchingthe file pattern "*_test.go".  These additional files can contain test functions,benchmark functions, and example functions.  See 'go help testfunc' for more.By default, go test needs no arguments.  It compiles and tests the packagewith source in the current directory, including tests, and runs the tests.The package is built in a temporary directory so it does not interfere with thenon-test installation.In addition to the build flags, the flags handled by 'go test' itself are:    -c  Compile the test binary to pkg.test but do not run it.    -i        Install packages that are dependencies of the test.        Do not run the test.The test binary also accepts flags that control execution of the test; theseflags are also accessible by 'go test'.  See 'go help testflag' for details.For more about build flags, see 'go help build'.For more about specifying packages, see 'go help packages'.See also: go build, go vet.jnml@fsc-r630:~/src/pkg$

In other words:

  • go test is okay.
  • go test pkg (assuming $GOPATH is ~ and the package is in ~/src/pkg) is okay.
  • go test whatever_test.go is not okay as that is not supportedas documented above.

To select which tests to run use the-run <regular_expression> flag (where the<regular_expression> is interpreted as having wildcards on either end, like.*<regular_expression>.*). For example

$ go test -run Say # from within the package's directory

or

$ go test -run Say my/package/import/path # from anywhere
Nathan Wailes's user avatar
Nathan Wailes
12.6k10 gold badges76 silver badges118 bronze badges
answeredFeb 6, 2013 at 7:22
zzzz's user avatar
Sign up to request clarification or add additional context in comments.

1 Comment

go test /abs/path/to/my/pkg also works.
28

This is somewhat strange in Golang. To be honest it took me some time to figure a way out.

A simple work-around is to include them in the command, eg:go test src/pkg/t1.go src/pkg/t1_test.go

IMHO, The best way is to keep it clean. So avoid having more than 1 file as dependency per test file. If you are using +1 file as dependency, consider creating a black-box test with a_test package and do not make use of any lowerCase internal vars.

This will avoid you having to deal with complicated dependencies on your day to day testing.

answeredMar 4, 2018 at 18:35
Thomas Modeneis's user avatar

Comments

9

Run

go test ./...

This will find all the tests in all test files. To run individual tests, specify the dependencies likehere.

answeredNov 3, 2020 at 15:43
bkdm's user avatar

Comments

1

I came across this Stackoverflow question after encountering the exact same issue myself: specifically, attempting to rungo test and then seeing a build failure indicating that the function in question isn't defined. I see that this question is somewhat old now (asked 8 years ago) but in my case the issue was that I was attempting to write code in Go 1.16 that seems to now assume the presence/use of modules. Seethis page for a starting reference on modules and easy follow-along example.

All I had to do in my case was rungo mod init [module name] and after that I could rungo test without any issues.

Hopefully this is of some value to users coming to this page after using a more modern (1.16+) version of Go.

answeredJan 5, 2022 at 22:34
Christopher Van Der Westhuizen's user avatar

Comments

0

Run:

go test -run ^TestFunctionName$ ProjectName/PackageName

This command can run the test methodTestFunctionName under the packagePackageName.

answeredNov 14, 2023 at 6:56
Benjamin's user avatar

1 Comment

Thank you for your interest in contributing to the Stack Overflow community. This question already has a few answers—including one that has been extensively validated by the community. Are you certain your approach hasn’t been given previously?If so, it would be useful to explain how your approach is different, under what circumstances your approach might be preferred, and/or why you think the previous answers aren’t sufficient. Can you kindlyedit your answer to offer an explanation?

Your Answer

Sign up orlog in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

By clicking “Post Your Answer”, you agree to ourterms of service and acknowledge you have read ourprivacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.