Go单元测试中的包可见性

Kev*_*Dog 2 unit-testing go

在Go中给出以下代码文件(名为server.go):

package glimpse

func SplitHeader() string {
return "hi there"
}
Run Code Online (Sandbox Code Playgroud)

和随附的测试文件(server_test.go):

package glimpse

import (
"testing"
)

func TestSplitHeader(t *testing.T) {

    answer := SplitHeader()
    if answer == "" {
    t.Error("No return value")
}

}
Run Code Online (Sandbox Code Playgroud)

为什么是以下命令:go test server_test.go

回报

# command-line-arguments
./server_test.go:9: undefined: SplitHeader
Run Code Online (Sandbox Code Playgroud)

我当然错过了一些灾难性的东西.

zzz*_*zzz 6

仅限使用

$ go test
Run Code Online (Sandbox Code Playgroud)

从包目录内执行测试.如果将特定文件命名为参数go test,则只考虑那些文件来构建测试二进制文件.这解释了'未定义'错误.

作为替代方案,可以使用"导入路径"作为参数来go test代替,例如

$ go test foo.com/glimpse
Run Code Online (Sandbox Code Playgroud)