【发布时间】:2015-09-29 21:07:07
【问题描述】:
我想测试我的主包中包含的一些函数,但我的测试似乎无法访问这些函数。
我的示例 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 包中删除所有内容,并使用一个简单的主函数来运行所有内容,然后在它们自己的包中测试这些函数,还是有办法在测试期间从主文件中调用这些函数?
【问题讨论】:
-
本视频有很好的测试包介绍视频(3m30s开始)https://youtu.be/XCsL89YtqCs?t=3m30s
-
您的 main() 函数(理想情况下,您的包 main 作为一个整体)不需要测试:它应该是一个或多个库的“哑”端点。测试那些。
-
main.go中的函数“foo”以小写“f”开头,使其私有,所以我认为您的测试不能直接调用它,因为它没有访问权限。跨度>
标签: unit-testing testing import go main