在 GoLang (testify) 中分离单元测试和集成测试是否有既定的最佳实践?我混合了单元测试(不依赖任何外部资源,因此运行速度非常快)和集成测试(依赖任何外部资源,因此运行速度较慢)。所以,当我说go test.
go test
最直接的技术似乎是在 main 中定义一个 -integrate 标志:
var runIntegrationTests = flag.Bool("integration", false , "Run the integration tests (in addition to the unit tests)")
然后在每个集成测试的顶部添加一个 if 语句:
if !*runIntegrationTests { this.T().Skip("To run this test, use: go test -integration") }
这是我能做的最好的吗?我搜索了 testify 文档,看看是否有命名约定或某些东西可以为我实现这一点,但没有找到任何东西。我错过了什么吗?
编写一个integration_test.go,并给它一个集成的构建标签。为诸如服务地址和连接字符串之类的内容定义(全局)标志,并在您的测试中使用它们。 ```golang // +build integration var fooAddr = flag.String(…) func TestToo(t testing.T) { f, err := foo.Connect(fooAddr) // … } ``` go test 像 go build 一样使用构建标签,因此您可以调用go test -tags=integration. 它还合成了一个调用 flag.Parse 的包 main,因此任何声明和可见的标志都将被处理并可用于您的测试。
编写一个integration_test.go,并给它一个集成的构建标签。为诸如服务地址和连接字符串之类的内容定义(全局)标志,并在您的测试中使用它们。
```golang // +build integration
var fooAddr = flag.String(…)
func TestToo(t testing.T) { f, err := foo.Connect(fooAddr) // … } ```
go test 像 go build 一样使用构建标签,因此您可以调用go test -tags=integration. 它还合成了一个调用 flag.Parse 的包 main,因此任何声明和可见的标志都将被处理并可用于您的测试。
go test -tags=integration
作为类似的选项,您还可以使用构建条件默认运行集成测试// +build !unit,然后通过运行go test -tags=unit.
// +build !unit
go test -tags=unit
@adamc 评论:
对于尝试使用构建标记的任何其他人,重要的是// +build test注释是文件中的第一行,并且在注释后包含一个空行,否则该-tags命令将忽略该指令。
// +build test
-tags
此外,构建注释中使用的标记不能有破折号,但允许使用下划线。例如,// +build unit-tests不会工作,而// +build unit_tests会。
// +build unit-tests
// +build unit_tests