如何测试golang中的主要包函数?

新手上路,请多包涵

我想测试我的主包中包含的一些功能,但我的测试似乎无法访问这些功能。

我的示例 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 包中删除所有内容,留下一个简单的主函数来运行所有内容,然后测试它们自己的包中的函数,或者我有没有办法在测试期间从主文件调用这些函数?

原文由 ThePiachu 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 444
1 个回答

当您在命令行上指定文件时,您必须指定所有文件

这是我的运行:

 $ ls
main.go     main_test.go
$ go test *.go
ok      command-line-arguments  0.003s

请注意,在我的版本中,我在命令行上同时运行了 main.go 和 main_test.go

此外,您的 _test 文件不太正确,您需要将测试函数称为 TestXXX 并指向 testing.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

原文由 David Budworth 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题