go - 在 Go 中使用测试依赖项但防止导出它们的最佳方法

标签 go testing go-modules

给定一个使用测试依赖项(如 github.com/stretchr/testify)的 Golang(1.14+)项目,现在假设该项目是一个可供其他人使用的公共(public)库。
通常当我现在使用 go mod graph我总是会看到这样的依赖:

github.com/its-me/my-great-library@1.0.0
github.com/stretchr/testify@v1.6.1 github.com/davecgh/go-spew@v1.1.0
github.com/stretchr/testify@v1.6.1 github.com/pmezard/go-difflib@v1.0.0
github.com/stretchr/testify@v1.6.1 github.com/stretchr/objx@v0.1.0
github.com/stretchr/testify@v1.6.1 gopkg.in/yaml.v3@v3.0.0-20200313102051-9f266ea9e77c
gopkg.in/yaml.v3@v3.0.0-20200313102051-9f266ea9e77c gopkg.in/check.v1@v0.0.0-20161208181325-20d25e280405
go mod tidygo mod download似乎也从使用的库中下载了所有测试依赖项。但不是告诉大家使用 exclude在他们的go.mod文件有没有办法防止它被导出?

最佳答案

go mod tidy旨在提供运行 go test all 所需的所有依赖项.请注意,在 Go 1.16 中,go test all对测试的传递依赖( https://tip.golang.org/doc/go1.16#all-pattern )会稍微不那么激进。
但是,如果您自己的测试本身使用 testify ,那么您的软件包的用户将需要下载 testify为了运行go test all在他们自己的模块中。
(正如 colm.anseo 所指出的,如果您愿意,可以将较重的测试拆分到一个单独的包中,这样当您的用户运行 go test all 时,他们将不会运行这些测试,也不需要下载这些依赖项的源代码。 )
请注意,Go 1.17 添加了对 module graph pruning 的支持: 如果你的模块指定 go 1.17或更高版本并且您的模块的使用者不会在他们自己的模块中使用您的测试依赖项,他们不需要下载源代码或go.mod该依赖项的文件。 (一旦 https://golang.org/issue/44435 被实现,当它们运行 go mod download 时,它也不会下载不相关的依赖。)

关于go - 在 Go 中使用测试依赖项但防止导出它们的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64071364/

相关文章:

mongodb - Mongo如何加入两个集合并在第二个集合上添加条件

go - sort.SearchInts 工作异常或者我遗漏了一些东西

casting - 如何将未编码的 Golang 对象转换为指定变量的类型

perl - 构建 Perl 时如何测试单个失败的测试

使用 Dockerfile/go.mod 文件的私有(private)存储库的 Go 构建失败

go - 引用本地的 Go 模块

go - 如何在Golang中使用os/exec处理用户输入?我无法停止输入阶段

silverlight - Silverlight 5的自动化UI测试工具

java - 无法使用 @ContextConfiguration(classes={ ... }) 加载 ApplicationContext

go - 如何将 go list -u -m all 与 vendoring 模式一起使用?