我试图在现有的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测试应该放在不同的目录中而不是依赖于包的内部,但不幸的是,我的同事没有写这些内容。我现在正在寻找快速解决方案!
答案 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
.