unit-testing - 如何在golang中测试主要的包功能?

标签 unit-testing testing import go program-entry-point

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

我的示例 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/

相关文章:

objective-c - 在 objective-c 中组织#import 的工具

java - 如何使用测试数据创建输入流

javascript - 使用 angular-translate 调用对 AngularJS 服务进行单元测试

ruby-on-rails - Q.A 的最终集成测试

java - 使用JOOQ创建测试用数据库

C++ 导入和重命名/重新保存图像

在 Mathematica 中导入 Google Sketchup 模型

unit-testing - 有没有办法对 AWS Cloudformation 模板进行单元测试

javascript - 测试扩展类时的 ES6 基类( super 方法)的 Jest 模拟方法

java - 添加测试用例的方法