我想测试我的主包中包含的一些函数,但我的测试似乎无法访问这些函数。
我的示例 main.go 文件如下所示:
package main
import (
"log"
)
func main() {
log.Printf(foo())
}
func foo() string {
return "Foo"
}
我的 main_test.go 文件看起来像:
package main
import (
"testing"
)
func Foo(t testing.T) {
t.Error(foo())
}
当我运行 go test main_test.go
我得到
# command-line-arguments
.\main_test.go:8: undefined: foo
FAIL command-line-arguments [build failed]
据我了解,即使我将测试文件移到别处并尝试从 main.go 文件导入,我也无法导入它,因为它是 package main
。
构建此类测试的正确方法是什么?我是否应该从 main
包中删除所有内容,除了一个简单的主函数来运行所有内容,然后在他们自己的包中测试这些函数,还是有办法让我在期间从主文件中调用这些函数测试?
最佳答案
当你在命令行指定文件时,你必须指定所有文件
这是我的运行:
$ ls
main.go main_test.go
$ go test *.go
ok command-line-arguments 0.003s
注意,在我的版本中,我在命令行上同时使用 main.go 和 main_test.go 运行
另外,你的 _test 文件不太对,你需要调用你的测试函数 TestXXX 并获取一个指向测试的指针。T
这是修改后的版本:
package main
import (
"testing"
)
func TestFoo(t *testing.T) {
t.Error(foo())
}
以及修改后的输出:
$ go test *.go
--- FAIL: TestFoo (0.00s)
main_test.go:8: Foo
FAIL
FAIL command-line-arguments 0.003s
关于unit-testing - 如何在golang中测试主要的包功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31352239/