无法生成覆盖
Not able to generate coverage
我的测试文件中有如下内容
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
然后我在import
中添加了"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
然后我在 import
中添加了 "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
如果我不使用 assert 我的测试有效
$ go test github.com/user/stringutil
ok github.com/user/stringutil 0.435s
似乎断言有问题?
With Go modules enabled (go1.11+)
get gotest.tools/v3
import "gotest.tools/v3/assert"
因此,您需要导入 gotest.tools/v3/assert
而不是导入 gotest.tools/assert
。这将引入最新版本的包(我假设你正在使用模块;这是最新版本的默认设置,除非你在 GOPATH 中工作并且没有 go.mod)。
导入 gotest.tools/assert
将引入一个旧的非模块感知版本。 an issue 中对此进行了详细讨论,其中包括评论
gotest.tools/assert is only a valid import for the v3 version of the package, which is long out of date
由于您的评论表明您没有使用模块,所以我又看了一遍。看来上面问题的评论不正确,这个项目的主人现在包括对模块的支持。不幸的是,这破坏了它在不支持模块的项目中的使用。您可以获得旧版本(需要使用 git)或在您的项目中使用模块(我推荐的方法)。
要获取旧版本,请更改 gotest.tools 文件夹(在您的情况下为 C:\Users\abc\go\src\gotest.tools
)和 运行 git checkout v2.3.0
(2.3.0 可能有效,但您可能需要回到 2.2.0)。请注意,这意味着您将使用旧版本的软件包。
我的测试文件中有如下内容
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
然后我在import
中添加了"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
然后我在 import
中添加了 "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
如果我不使用 assert 我的测试有效
$ go test github.com/user/stringutil
ok github.com/user/stringutil 0.435s
似乎断言有问题?
With Go modules enabled (go1.11+)
get gotest.tools/v3
import "gotest.tools/v3/assert"
因此,您需要导入 gotest.tools/v3/assert
而不是导入 gotest.tools/assert
。这将引入最新版本的包(我假设你正在使用模块;这是最新版本的默认设置,除非你在 GOPATH 中工作并且没有 go.mod)。
导入 gotest.tools/assert
将引入一个旧的非模块感知版本。 an issue 中对此进行了详细讨论,其中包括评论
gotest.tools/assert is only a valid import for the v3 version of the package, which is long out of date
由于您的评论表明您没有使用模块,所以我又看了一遍。看来上面问题的评论不正确,这个项目的主人现在包括对模块的支持。不幸的是,这破坏了它在不支持模块的项目中的使用。您可以获得旧版本(需要使用 git)或在您的项目中使用模块(我推荐的方法)。
要获取旧版本,请更改 gotest.tools 文件夹(在您的情况下为 C:\Users\abc\go\src\gotest.tools
)和 运行 git checkout v2.3.0
(2.3.0 可能有效,但您可能需要回到 2.2.0)。请注意,这意味着您将使用旧版本的软件包。