Mockery 安装指南:通过 Composer 与 Git 安装 PHP Mock 框架(附 PHPUnit 集成与版本说明)

发布时间:2026/9/24 19:42:25
Mockery 安装指南:通过 Composer 与 Git 安装 PHP Mock 框架(附 PHPUnit 集成与版本说明) 测试开发工具【免费下载链接】mockeryMockery is a simple yet flexible PHP mock object framework for use in unit testing with PHPUnit, PHPSpec or any other testing framework. Its core goal is to offer a test double framework with a succinct API capable of clearly defining all possible object operations and interactions using a human readable Domain Specific Language (DSL).项目地址https://gitcode.com/gh_mirrors/mo/mockery点击查看免费下载导读本文是 Mockery 官方文档 docs/getting_started/installation.rst 的完整讲解覆盖两种主流安装方式通过 Composer 将其声明为开发依赖或直接克隆 Git 仓库使用开发版本。读完本文你将掌握composer require --dev mockery/mockery与dev-master版本约束的正确用法、生产环境--no-dev的语义以及安装完成后如何与 PHPUnit 无缝集成快速搭建可用的测试替身test double环境。为什么选择 Composer 安装 MockeryMockery 是一个面向 PHP 单元测试的 mock 对象框架其核心目标是提供一套简洁、可读性强的 DSL 来描述对象操作与交互可配合 PHPUnit、PHPSpec 或任何其他测试框架使用参见 docs/index.rst 与根目录 README.md。作为测试专用的开发依赖它不应该被安装到生产环境——这正是官方文档把安装方式设计为require-dev的根本原因。在当前仓库的 composer.json 中可以印证这一点运行时依赖require仅两项php 7.3与hamcrest/hamcrest-php: ^2.0 || ^3.0Hamcrest 用于参数匹配器开发依赖require-dev则包含phpunit/phpunit与代码规范工具symplify/easy-coding-standard同时声明了conflict: phpunit/phpunit 8.0意味着旧版 PHPUnit 无法与当前 Mockery 共存自动加载autoload采用 PSR-4将Mockery\命名空间映射到library/Mockery目录并通过files字段加载 library/helpers.php 与 library/Mockery.php后者是Mockery::mock()、Mockery::spy()等核心入口所在。由此可见Mockery 本体依赖极轻把它放进require-dev不会污染生产依赖树。方式一通过 Composer 安装推荐前置准备安装 ComposerComposer 是 PHP 的依赖管理工具。如果你的项目还没有 Composer需要先按照 Composer 官方下载页的指引完成安装。安装完成后建议在你的项目根目录即存在composer.json的项目目录中执行后续命令。第一步在 composer.json 中声明开发依赖官方文档给出的建议写法是在项目的composer.json中声明require-dev{ require-dev: { mockery/mockery: dev-master } }关于版本约束官方文档特别强调了两点dev-master对应 Mockery Git 仓库的 master 分支开发版本。官方虽然尽力保证 master 分支的稳定性但开发版本毕竟不是正式发布行为可能变化stable标签如果你更希望使用当前稳定版本标签可以改用稳定版约束例如^1.6或直接引用发布标签避免追踪未发布代码带来的不确定性。README 与 Packagist 上的常规做法是直接执行composer require --dev mockery/mockeryComposer 会自动解析出当前最新的稳定版本。第二步执行安装声明好依赖后在项目根目录运行php composer.phar update该命令会根据composer.json解析并下载依赖同时更新composer.lock锁定具体版本。由于 Mockery 被声明为开发依赖因此在生产环境执行php composer.phar update --no-dev时Mockery不会被安装——这正是把测试框架放进require-dev的核心收益生产部署不会携带任何测试专用代码。更快捷的方式命令行一行搞定如果不想手工编辑composer.json可以直接用 Composer 的命令行接口完成声明 安装php composer.phar require --dev mockery/mockery这条命令会自动把mockery/mockery写入composer.json的require-dev段并立即安装效果与手动编辑文件后执行update等价是日常开发中最常用的方式。README 中给出的精简版composer require --dev mockery/mockery与此相同在已全局安装 composer 可执行文件的环境下使用。方式二通过 Git 克隆安装开发版本Mockery 的 Git 仓库在其 master 分支维护开发版本。如果希望跟踪最新代码例如贡献代码、体验未发布特性可以直接克隆仓库到本地或者如官方文档所示在composer.json中将版本约束引用为dev-master——即第一节示例的做法Composer 会直接从这个分支拉取源码。{ require-dev: { mockery/mockery: dev-master } }需要说明的是使用dev-master意味着你拿到的代码不是经过发布流程的稳定版本官方虽尽力保持 master 稳定但生产项目仍建议锁定稳定发布标签。当前仓库中还可以看到多份面向不同 PHPUnit 大版本的测试配置如 phpunit-9.6.xml.dist、phpunit-11.5.xml.dist、phpunit-12.5.xml.dist 等从侧面反映该分支持续兼容多个 PHPUnit 版本的开发状态。安装完成后验证与 PHPUnit 集成快速验证安装是否成功安装完成后可以通过以下方式快速验证 Mockery 是否可用require vendor/autoload.php; $mock \Mockery::mock(MyClass); $mock-shouldReceive(foo)-once()-andReturn(bar); echo $mock-foo(); // 输出 bar如果输出正常且没有类加载错误说明 PSR-4 自动加载配置Mockery\→library/Mockery已生效。与 PHPUnit 集成两种官方推荐方式Mockery 与 PHPUnit 的集成方式在 docs/getting_started/quick_reference.rst 中有详细示例安装后即可直接使用无需额外下载组件方式 A继承MockeryTestCaseuse \Mockery\Adapter\Phpunit\MockeryTestCase; class MyTest extends MockeryTestCase { }方式 B使用MockeryPHPUnitIntegrationtrait适用于已有自定义基类的测试use \PHPUnit\Framework\TestCase; use \Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; class MyTest extends TestCase { use MockeryPHPUnitIntegration; }这两种方式都会在测试生命周期内自动调用\Mockery::close()免去手工维护tearDown()的麻烦。相关实现位于 library/Mockery/Adapter/Phpunit/MockeryTestCase.php 及同目录的MockeryPHPUnitIntegration.php详细说明见 docs/reference/phpunit_integration.rst。历史提示在 Mockery 0.9.x 及更早版本中PHPUnit 集成是通过 listener 机制实现的从 1.0.0 起改为上述 trait/基类方式参见 docs/getting_started/upgrading.rst。首个测试示例安装与集成完成后可以参考 docs/getting_started/simple_example.rst 的示例快速上手。例如创建一个 mock 服务并约定其readTemp方法被调用 3 次、依次返回 10、12、14use \Mockery; class TemperatureTest extends \PHPUnit\Framework\TestCase { public function tearDown() { Mockery::close(); } public function testGetsAverageTemperatureFromThreeServiceReadings() { $service Mockery::mock(service); $service-shouldReceive(readTemp) -times(3) -andReturn(10, 12, 14); $temperature new Temperature($service); $this-assertEquals(12, $temperature-average()); } }版本与运行环境注意事项在规划安装版本时需要注意以下几点依据仓库内文档与配置PHP 版本要求当前仓库的 composer.json 声明php 7.3历史版本方面Mockery 1.0.0 要求 PHP 5.6 起而 1.3 是最后一个支持 HHVM 3 与 PHP 5 的版本HHVM 4 不再受支持见 README.md。PHPUnit 兼容性当前版本要求 PHPUnit 8.0conflict声明为8.0仓库同时维护了 9.6 / 10.5 / 11.5 / 12.5 / 13.3 等多个版本线的测试配置说明其覆盖了较宽的 PHPUnit 版本范围。语义化版本策略Mockery 团队遵循语义化版本Semantic Versioning但其部分内部实现被视为私有 API随时可能变更——仅因为某个类不是 final 或方法未标记 private并不代表它属于版本约定中保证的公共 API。仓库迁移提醒Mockery 曾从padraic/mockery迁移到mockery/mockery。如果本地 Git 仓库仍指向旧地址可通过git remote -v查看并更新远端地址旧地址的重定向会在一段时间内透明生效。小结安装 Mockery 的核心要点可归纳为推荐方式php composer.phar require --dev mockery/mockery或手动在composer.json的require-dev声明后执行php composer.phar update生产隔离--no-dev安装不会携带 Mockery确保测试代码不进入生产环境尝鲜开发版在require-dev中使用dev-master引用 master 分支稳定项目则使用stable或具体版本标签集成衔接安装后通过继承MockeryTestCase或混入MockeryPHPUnitIntegrationtrait 即可获得自动清理Mockery::close()能力随后可参考 docs/getting_started/quick_reference.rst 与 docs/getting_started/simple_example.rst 快速上手测试编写。赞分享测试开发工具【免费下载链接】mockeryMockery is a simple yet flexible PHP mock object framework for use in unit testing with PHPUnit, PHPSpec or any other testing framework. Its core goal is to offer a test double framework with a succinct API capable of clearly defining all possible object operations and interactions using a human readable Domain Specific Language (DSL).项目地址https://gitcode.com/gh_mirrors/mo/mockery点击查看免费下载相关推荐从灰暗到惊艳用foobox重新定义你的foobar2000音乐体验从灰暗到惊艳用foobox重新定义你的foobar2000音乐体验 当我第一次打开foobar2000时那灰暗单调的界面让我有些失望——如此强大的音频播放器桌面应用音视频PHP-CS-Fixer 安装与升级全指南Composer、Docker、PHIVE 与 CI 集成PHP CS Fixer 安装与升级全指南Composer、Docker、PHIVE 与 CI 集成 PHP CS Fixer 是一款自动修复 PHP 编码规开发工具代码质量静态分析Lint格式化**PHPUnit单元测试框架安装与使用指南**PHPUnit单元测试框架安装与使用指南 目录结构及介绍 当您克隆或下载 PHPUnit 库时, 您将看到以下主要的文件和目录: src : 此目录包含PHPU测试质量保障开发工具上一篇Unity场景管理终极指南异步加载与切换优化技巧下一篇Tye项目初始化终极指南5分钟快速创建微服务架构创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考