如何运行“go test”并包含单元测试文件但排除其他测试文件

Phi*_*ber 3 unit-testing go

我正在尝试在现有的 Go 项目上自动运行单元测试。它已经有很多现有的测试来执行非单元测试的事情,例如联系外部服务和写入数据库。我想使用命名约定从自动化中排除这些测试文件。假设项目的结构是这样的:

gopath/
|-package1.go
|-package1_unit_test.go
|-package1_e2e_test.go
|-package2/
  |-package2.go
  |-package2_unit_test.go
  |-package2_e2e_test.go
Run Code Online (Sandbox Code Playgroud)

我可以go test ./...运行所有测试。如果我在单元测试的名称中包含“UnitTest”,我就可以运行go test ./... -run UnitTest,但这仍然会运行 e2e 测试中的启动代码。我需要它完全忽略这些文件。有人建议运行go test $(go list ./... | grep -v /e2e/)但go list输出目录名,而不是文件名,所以这是行不通的。

是的,理想情况下,e2e 测试应该放在不同的目录中,而不是依赖于包的内部结构,但不幸的是,这不是我的同事编写它们的方式。我现在正在寻找快速修复方法!

Adr*_*ian 5

您可以使用构建标签将构建(包括测试)限制为特定的文件子集:https://dave.cheney.net/2014/09/28/using-build-to-switch- Between-debug-and-release

例如,您可以将//+build integration其放在集成测试文件的顶部,然后这些文件只会在您运行时构建和执行go test -tags integration。