本文档描述了标准 Go 项目布局中 `/test` 目录的用途、组织和用法。`/test` 目录专门用于托管外部测试应用程序和测试数据,以补充 Go 的标准测试机制。它不适用于常规的包级测试,这些测试应与它们所测试的代码放在一起。
有关常规包测试的文档,请参阅 Go 项目布局概述。
来源: README.md146-148
`/test` 目录是 Go 项目标准包级测试范式的补充,它充当外部测试和测试数据的一个集中位置。虽然 Go 鼓励将包测试放在与它们所测试的代码相同的目录中的 `*_test.go` 文件中,但复杂的项目通常需要额外的测试工件,例如集成测试、性能测试和大量测试数据集。
来源: README.md146-148 test/README.md1-3
`/test` 目录是 Go 项目支持基础设施的一部分,而不是核心应用程序代码。它位于与 `/cmd`、`/pkg` 和 `/internal` 等其他顶级目录相同的级别。
来源: README.md146-148
`/test` 目录专门用于:
与专注于单元测试单个包的标准 Go 测试不同,`/test` 目录中的测试通常采用更广泛、更整体的方法来测试应用程序。
来源: README.md146-148 test/README.md1-3
Go 项目布局指南并未规定 `/test` 目录的具体结构。这种灵活性允许开发人员以对其特定项目有意义的方式组织测试工件。
对于大型项目,一种常见模式是创建子目录来组织不同类型的测试或测试数据。
Go 的工具将忽略名为 `testdata` 的目录,以及以 `.` 或 `_` 开头的目录。这为包含测试数据的目录命名提供了灵活性。
| 目录名称 | 被 Go 工具忽略 | 用例 |
|---|---|---|
/test/testdata | 是 | 测试数据的标准约定 |
/test/data | 否 | 当数据需要包含在构建中时 |
/test/_data | 是 | 替代命名约定 |
/test/.data | 是 | 替代命名约定 |
来源: README.md146-148 test/README.md1-5
`/test` 目录中的测试通常跨越包边界来执行应用程序组件,验证它们在实际场景中如何协同工作。
来源: README.md146-148
OpenShift Origin 项目提供了 `/test` 目录组织的一个示例
Go 项目中的其他常见模式包括:
为了阐明包级测试与 `/test` 目录中测试的区别
| 方面 | 包级测试 | `/test` 目录测试 |
|---|---|---|
| 位置 | 在被测试代码相同目录下的 `*_test.go` 文件 | 项目根目录下独立的 `/test` 目录 |
| 范围 | 通常是单个包的单元测试 | 集成、端到端和外部测试 |
| 命令 | 使用 `go test ./...` 运行 | 可能需要自定义测试运行器或脚本 |
| 访问 | 可以访问未导出的包元素 | 只能访问导出的 API |
| 目的 | 验证单个包的功能 | 验证跨包交互和整体系统行为 |
来源: README.md146-148 test/README.md1-3
`/test` 目录中的测试通常遵循以下模式:
来源: README.md146-148 test/README.md1-3
处理 `/test` 目录时
来源: README.md146-148 test/README.md1-5
`/test` 目录为补充 Go 的标准包级测试方法提供了专门的外部测试应用程序和测试数据空间。虽然组织此目录没有严格的规则,但对于构建测试应用程序、集成测试和测试数据,已经出现了常见的模式。通过遵循这些模式,开发人员可以创建全面的测试套件,以验证跨包边界的应用程序功能。
刷新此 Wiki
最后索引时间2025 年 4 月 18 日(aa2033)