无法生成GO代码的覆盖范围

问题描述 投票:0回答:1

我的测试文件中有类似下面的内容

package stringutil

import (
    "testing"
    "gotest.tools/assert"
)

[当我尝试测试时,我得到错误

$ go test github.com/user/stringutil
# github.com/user/stringutil
package github.com/user/stringutil (test)
        imports gotest.tools/assert
        imports gotest.tools/v3/assert/cmp: code in directory C:\Users\abc\go\src\gotest.tools\assert\cmp expects import "gotest.tools/assert/cmp"
FAIL    github.com/user/stringutil [setup failed]
FAIL

然后我在导入中添加了“ gotest.tools/assert/cmp”。

package stringutil

import (
    "testing"
    "gotest.tools/assert"
    "gotest.tools/assert/cmp"
)

当我尝试测试时,我遇到下一个错误

$ go test github.com/user/stringutil
# github.com/user/stringutil
package github.com/user/stringutil (test)
        imports gotest.tools/assert
        imports gotest.tools/v3/internal/format: code in directory C:\Users\abc\go\src\gotest.tools\internal\format expects import "gotest.tools/internal/format"
FAIL    github.com/user/stringutil [setup failed]
FAIL

然后我在导入中添加了“ gotest.tools/internal/format”

package stringutil

import (
    "testing"
    "gotest.tools/assert"
    "gotest.tools/assert/cmp"
    "gotest.tools/internal/format"
)

现在在测试时出现另一个错误

$ go test github.com/user/stringutil
# github.com/user/stringutil
package github.com/user/stringutil (test)
        imports gotest.tools/assert
        imports gotest.tools/v3/assert/cmp
        imports gotest.tools/v3/internal/format
        imports gotest.tools/v3/internal/difflib: code in directory C:\Users\abc\go\src\gotest.tools\internal\difflib expects import "gotest.tools/internal/difflib"
FAIL    github.com/user/stringutil [setup failed]
FAIL

然后我在导入中添加了“ gotest.tools/internal/difflib”

package stringutil

import (
    "testing"
    "gotest.tools/assert"
    "gotest.tools/assert/cmp"
    "gotest.tools/internal/format"
    "gotest.tools/internal/difflib"
)

现在我得到了另一个错误

$ go test github.com/user/stringutil
# github.com/user/stringutil
package github.com/user/stringutil (test)
        imports gotest.tools/internal/difflib: use of internal package gotest.tools/internal/difflib not allowed
FAIL    github.com/user/stringutil [setup failed]
FAIL

如果我不使用断言,我的测试有效

$ go test github.com/user/stringutil
ok      github.com/user/stringutil      0.435s

看起来好像断言有问题吗?

go assert
1个回答
0
投票

来自the usage instructions

启用Go模块(go1.11 +)

获取gotest.tools/v3

导入“ gotest.tools/v3/assert”]

因此,除了导入gotest.tools/assert,您还需要导入gotest.tools/v3/assert。这将带来软件包的最新版本(我假设您正在使用模块;这是go的最新版本的默认值,除非您在GOPATH中工作且没有go.mod)。

导入gotest.tools/assert将带来旧的非模块识别版本。在an issue中对此进行了详细讨论,其中包括注释

gotest.tools/assert只是该软件包的v3版本的有效导入,该版本已过期很长时间

由于您的评论表明您没有使用模块,因此我又做了另一番尝试。似乎以上问题中的评论不正确,并且该项目的管理员现在包括对模块的支持。不幸的是,这破坏了它在不支持模块的项目中的使用。您可以使用较旧的发行版(需要使用git)或在项目中使用模块(我推荐的方法)。

要使较旧的发行版更改到gotest.tools文件夹(在您的情况下为C:\Users\abc\go\src\gotest.tools)并运行git checkout v2.3.0(2.3.0可能有效,但您可能需要返回2.2.0)。请注意,这意味着您将使用旧版本的软件包。

© www.soinside.com 2019 - 2024. All rights reserved.