golang模块名称更改导致本地测试失败

时间:2020-09-16 10:38:27

标签: go github go-modules

我有别人的代码。其模块名称的格式如下:

module github.com/foo/bar/v3

我在本地进行了一些更改,并将本地go.mod更新为v4,而不是v3,但这现在导致本地运行测试失败(请参见下文,我已将输出通用化。)

注意:go.sum此时为空。

$ go test -v

go: finding module for package github.com/foo/bar/v3
go: found github.com/foo/bar/v3 in github.com/foo/bar/v3 v3.0.0
# github.com/foo/bar/v4_test [github.com/foo/bar/v4.test]
./some_test.go:232:19: x.Y undefined (type *package.Example has no field or method Y)
FAIL    github.com/foo/bar/v4 [build failed]

我不确定为什么要尝试查找该软件包的实际v3版本,并因此更新go.sum使其包含其中?

我从测试文件中看到该软件包使用了不同的软件包名称(例如package foo_test),因此在编写其测试代码时,它不依赖于导出的数据结构。所以也许这就是为什么会这样?它会看到对x.Y的引用,然后在github中查找x

但是我不确定为什么当我在go.mod文件中使用v3引用时测试能否正常运行?

关于分叉项目时,这里发生了什么以及应该如何碰撞go模块的任何正确想法?

谢谢。

1 个答案:

答案 0 :(得分:3)

如果更改module文件中的go.mod名称,则必须用更新的import名称替换所有module路径。

在用github.com/foo/bar/v3替换模块github.com/foo/bar/v4时,在整个项目中,必须用find and replace github.com/foo/bar/v3 github.com/foo/bar/v4引用所有$ go test -v

然后您的cypress.get('').should('')应该可以正常运行。