如何运行'去测试'并包含单元测试文件,但不包括其他测试文件

时间:2017-03-22 17:25:59

标签: 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

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

是的,理想情况下,e2e测试应该放在不同的目录中而不是依赖于包的内部,但不幸的是,我的同事没有写这些内容。我现在正在寻找快速解决方案!

1 个答案:

答案 0 :(得分:2)

You can use build tags to limit builds, including tests, to a certain subset of files: https://dave.cheney.net/2014/09/28/using-build-to-switch-between-debug-and-release

For example, you could put //+build integration at the top of your integration test files, and then those would only be built and executed when you run go test -tags integration.