如何设置ThinkPHP项目中Mock数据存放的规范目录?
- 内容介绍
- 文章标签
- 相关推荐
本文共计875个文字,预计阅读时间需要4分钟。
ThinkPHP 框架本身没有约定测试数据目录,可以使用 phpunit 进行测试,但需要手动加载数据路径。若将 JSON 或 YAML 文件丢失到 tests/fixtures 或 tests/data 目录,框架将无法读取逻辑,导致错误:
推荐统一放在 tests/_data(下划线前缀避免被 PSR-4 扫描到),但必须显式构造路径:
-
__DIR__ . '/_data/user_mock.json'是安全写法;用base_path('tests/_data/...')会报错,因为base_path()默认只认app、public等核心目录 - 别依赖
getcwd(),CI 环境下工作目录可能是/或/tmp,路径直接失效 - 如果用
think-orm的MockConnection,SQL 模拟数据建议直接写在测试方法里,而不是从文件读——省去 I/O 开销,也避开路径问题
tests/Feature 和 tests/Unit 下的 Mock 数据要不要分开?
要分,但不是按“功能”或“单元”分,而是按「数据复用粒度」分:共享结构用 tests/_data/shared/,单测独占用 tests/Unit/SomeTest/_data/。
本文共计875个文字,预计阅读时间需要4分钟。
ThinkPHP 框架本身没有约定测试数据目录,可以使用 phpunit 进行测试,但需要手动加载数据路径。若将 JSON 或 YAML 文件丢失到 tests/fixtures 或 tests/data 目录,框架将无法读取逻辑,导致错误:
推荐统一放在 tests/_data(下划线前缀避免被 PSR-4 扫描到),但必须显式构造路径:
-
__DIR__ . '/_data/user_mock.json'是安全写法;用base_path('tests/_data/...')会报错,因为base_path()默认只认app、public等核心目录 - 别依赖
getcwd(),CI 环境下工作目录可能是/或/tmp,路径直接失效 - 如果用
think-orm的MockConnection,SQL 模拟数据建议直接写在测试方法里,而不是从文件读——省去 I/O 开销,也避开路径问题
tests/Feature 和 tests/Unit 下的 Mock 数据要不要分开?
要分,但不是按“功能”或“单元”分,而是按「数据复用粒度」分:共享结构用 tests/_data/shared/,单测独占用 tests/Unit/SomeTest/_data/。

