Golang 无法在同一个包中进行测试

标签 go goconvey

在为我的一个源文件 ( commonutil.go ) 创建单元测试时遇到问题

package util

import "github.com/nu7hatch/gouuid"

// GenerateUUID Returns generated UUID sequence
func GenerateUniqueID(hostname string) (string, error) {
    var result, err = uuid.NewV4()
    return hostname + ":" + result.String(), err
}

对于上面的源,我创建了测试文件“commonutil_test.go”(在同一个包中)

package util

import "testing" 
func TestCommonUtil(t *testing.T) {
t.Run("Test generate UUID", func(t *testing.T) {

    var uuid, _ = GenerateUniqueID ("test")
    //fmt.Printf("UUID isa %v \n", uuid)
    if uuid == "" {
        t.Errorf("UUID expected, but result is empty ")
    }
})

然而,当尝试执行“go test util/commonutil_test.go”时,它显示:

util\commonutil_test.go:8: undefined: GenerateUniqueID
FAIL command-line-arguments [build failed]

在测试中更改为 util.GenerateUniqueID 可以解决问题,但是当使用 Goconvey 运行覆盖时将导致构建失败:

can't load package: import cycle not allowed package rudygunawan.com/MyProject/HFLC-Go/util imports rudygunawan.com/MyProject/HFLC-Go/util

有解决这个问题的想法吗?我很困惑。

Go版本是go1.7.1 windows/386

最佳答案

当我尝试运行单个测试文件时,我遇到了类似的问题。

我想要这样,因为它是一种测试驱动的开发,我只想对我目前正在处理的代码运行测试,而不是所有 x 分钟的运行测试。

解决方案原来不是从文件运行测试,而是按名称(实际上是正则表达式)运行特定测试。所以在你的情况下我猜它会是:

go test ./util -run TestCommonUtil

另一种方法似乎是列出构建测试代码所需的所有文件:

go test util/commonutil_test.go util/commonutil.go

关于Golang 无法在同一个包中进行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39737599/

相关文章:

mongodb - 在 mgo 中更新多个数组中的单个子文档

go - 传达简单测试失败

go - 在端点 REST API 的 GoConvey 测试期间跳过某些包含静态内容的文件夹

arrays - 如何在Golang中将字符串类型数组的值映射到int类型数组?

go - 从 docker 容器内运行 goconvey http 服务器

testing - 为什么 GoConvey 测试失败并显示错误代码 0?

c - 空指针的 Golang 等价物是什么

docker - 云运行和发布容器

go - 从 golang 中的 tcp 连接读取