为了详细说明我对@ Ainar-G出色答案的评论,过去一年中,我一直在结合-short
使用Integration
命名规则和约定,以实现两全其美。
单元和集成在同一文件中测试和谐
构建标志先前迫使我有多个文件(services_test.go
,services_integration_test.go
,等)。
相反,请以下面的示例为例,其中前两个是单元测试,最后我进行了集成测试:
package services
import "testing"
func TestServiceFunc(t *testing.T) {
t.Parallel()
...
}
func TestInvalidServiceFunc3(t *testing.T) {
t.Parallel()
...
}
func TestPostgresVersionIntegration(t *testing.T) {
if testing.Short() {
t.Skip("skipping integration test")
}
...
}
请注意,最后一个测试具有以下约定:
- 使用
Integration
的测试名称。
- 检查是否在
-short
标志指令下运行。
规范基本上是这样的:“正常编写所有测试。如果是长期运行的测试或集成测试,请遵循此命名约定并检查对-short
您的同行是否友善。”
仅运行单元测试:
go test -v -short
这为您提供了一系列不错的消息,例如:
=== RUN TestPostgresVersionIntegration
--- SKIP: TestPostgresVersionIntegration (0.00s)
service_test.go:138: skipping integration test
仅运行集成测试:
go test -run Integration
这仅运行集成测试。对于生产中的金枪鱼烟雾测试很有用。
显然,这种方法的缺点是,如果有人在go test
没有-short
标志的情况下运行它,则它将默认运行所有测试-单元测试和集成测试。
实际上,如果您的项目足够大,可以进行单元测试和集成测试,那么您很可能正在使用可以Makefile
在其中使用简单指令go test -short
的地方。或者,只需将其放入README.md
文件中,然后将其命名为“ day”。