go test无法在同一个包中找到功能

时间:2013-02-06 06:49:42

标签: go

目录结构是:

SRC SRC / PKG SRC / PKG / t1.go SRC / PKG / t1_test.go

t1.go

package pkg

import (
"fmt"
)

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

t1_test.go

package pkg

import (
    "testing"
)

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

在dir src / pkg

从命令行调用go test

去测试t1_test.go

错误: ./t1_test.go:8:undefined:SayHI FAIL命令行参数[build failed]

但功能在那里

感谢任何提示

4 个答案:

答案 0 :(得分:43)

它按预期工作。

jnml@fsc-r630:~/src/pkg$ go help test
usage: 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 matching
the 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 package
with 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 the
non-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; these
flags 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$ 

IOW:

  • go test没问题。
  • go test pkg(假设$ GOPATH为〜且包在〜/ src / pkg中)没问题。
  • go test whatever_test.go不合适,因为上面没有 支持。

要选择要运行的测试,请使用-run RE标志(RE是正则表达式,解释为*RE*)。例如

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

$ go test -run Say my/package/import/path # from anywhere

答案 1 :(得分:6)

这在Golang有些奇怪。说实话,我花了一些时间才想出办法。

一个简单的解决方法是将它们包含在命令中,例如: go test src/pkg/t1.go src/pkg/t1_test.go

恕我直言,最好的方法是保持清洁。因此,避免每个测试文件包含多个文件作为依赖项。如果您使用+1文件作为依赖项,请考虑使用_test包创建黑盒测试,并且不要使用任何lowerCase内部变量。

这将避免您在日常测试中处理复杂的依赖关系。

答案 2 :(得分:0)

运行

go test ./...

这将在所有测试文件中找到所有测试。要运行单个测试,请指定诸如here之类的依赖项。

答案 3 :(得分:-2)

我从

更改了我的go文件名
  

first-test.go

  

first_test.go

有效,希望帮助〜