我在包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作为文件名有什么问题。 对于只有主程序包的代码,这个名称工作正常。
这是一个错误,或者我做错了什么。
答案 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