Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Export structure only for testing in Golang

Tags:

go

I have a utility package that many other packages use. I also created some test structures that implement those interfaces. And I put them in interfaces_test.go

I'd like to be able to import those test structures in other packages in my *_test.go files.

I saw something like that in http://golang.org/src/pkg/os/export_test.go but whatever I try I get an error similar to this one:

go test something/mypackage
mypackage/ant_lat_lon_test.go:46: undefined: rutl.TestAntenner
FAIL    something/mypackage [build failed]

Is there a way to do it?

like image 919
rzajac Avatar asked Mar 09 '14 02:03

rzajac


People also ask

Should tests be in the same package Golang?

Writing tests in Go requires a test file link, and this test file must always end with _test.go . By convention, Go testing files are always located in the same folder, or package, where the code they are testing resides.

Where do I put test files in Go?

The convention for naming test files in Go is to end the file name with the _test.go suffix and place the file in the same directory as the code it tests.

What is export in Golang?

In Go, a name is exported if it begins with a capital letter. For example, Pizza is an exported name, as is Pi , which is exported from the math package. pizza and pi do not start with a capital letter, so they are not exported. When importing a package, you can refer only to its exported names.


1 Answers

Files matching *_test.go are only compiled when testing the package they are part of. If you are testing package A that uses package B, you won't have access to the _test.go code from package B.

So the two options are:

  1. Always compile the test support code into package B.
  2. If the test support code only depends on the exported interface of B, consider splitting it out into a separate package.
like image 52
James Henstridge Avatar answered Sep 28 '22 05:09

James Henstridge