不要运行名为package_test.go的程序

时间:2016-01-30 07:51:55

标签: go

我在包pack1下面有以下代码。文件名为pack1.go

package pack1

var Pack1Int int = 42
var pack1Float = 3.14

func ReturnStr() string {
    return "Hello world!"
}

并在主程序中执行以下代码。文件名为package_test.go

package main

import (
    "fmt"
    "./pack1"
)

func main() {
    var test1 string
    test1 = pack1.ReturnStr()
    fmt.Printf("Return string from pack1 : %s\n", test1)
    fmt.Printf("Integer from pack1 : %d\n", pack1.Pack1Int)
}

当我尝试使用命令go run package_test.go运行它时,我收到以下错误

go run: cannot run *_test.go files (package_test.go)

但是,如果我将文件重命名为abc.go,那么我正在获得正确的输出,即

Return string from pack1 : Hello world!
Integer from pack1 : 42

我很好奇使用package_test.go作为文件名有什么问题。 对于只有主程序包的代码,这个名称工作正常。

这是一个错误,或者我做错了什么。

2 个答案:

答案 0 :(得分:4)

不是错误,它是专门设计的。 go run检测_test个文件并将其视为包的测试文件,测试文件将作为单独的包编译,然后与主测试二进制文件链接和运行。
建议您将包文件放到GOPATH/src/PACK_NAME/,然后使用*_test.go运行go test

答案 1 :(得分:4)

您无法将程序文件命名为*_test.go,因为这是集成Go testing system

的一部分
  

要编写新的测试套件,创建一个名称以_test.go 结尾的文件,其中包含此处所述的TestXxx函数。将文件放在与正在测试的文件包相同的包中。该文件将从常规软件包构建中排除,但在运行“go test”命令时将包含该文件。有关更多详细信息,请运行“go help test”和“go help testflag”。

只需将package_test.go重命名为packagetest.go

即可