Mockery 升级指南:从旧版本迁移到新版本的最佳实践
前言
Mockery 作为 PHP 生态中广受欢迎的模拟对象框架,在不同版本间存在一些重要的行为变更。本文将系统性地介绍从旧版本升级到新版本时需要注意的关键点,帮助开发者平滑过渡。
升级到 1.0.0 版本的注意事项
PHP 版本要求
1.0.0 版本将最低 PHP 版本要求提升至 5.6。如果你的项目运行在更早的 PHP 版本上,需要先升级 PHP 环境。
与 PHPUnit 的集成方式变更
在 0.9.x 及更早版本中,Mockery 通过 PHPUnit 监听器实现集成,该监听器会自动调用 \Mockery::close()
方法。
在 1.0.0 版本中,推荐采用以下两种新方式:
- 使用
\Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration
trait - 继承
\Mockery\Adapter\Phpunit\MockeryTestCase
测试基类
这两种方式都会自动处理 Mockery 的清理工作,使测试代码更加简洁。
废弃的 MustBe 匹配器
\Mockery\Matcher\MustBe
匹配器在 1.0.0 版本中被标记为废弃,并将在 2.0.0 版本中移除。建议开发者转而使用 PHPUnit 提供的等效匹配器。
新增的 allows 和 expects 方法
1.0.0 版本引入了两个新方法 allows
和 expects
来设置期望。这意味着:
- 这两个方法名现在是 Mockery 的保留关键字
- 你希望模拟的类不能包含同名的
allows
或expects
方法
字符串参数匹配行为的变更
在 0.9.x 及更早版本中,Mockery 在匹配字符串参数时会尝试使用正则表达式作为最后的匹配手段。
1.0.0 版本中这一行为被移除,现在仅会尝试:
- 严格相等比较(===)
- 宽松相等比较(==)
如果需要正则表达式匹配,应该使用新的 \Mockery\Matcher\Pattern
匹配器。
异常抛出功能的增强
andThrow
方法现在可以抛出任何实现了 \Throwable
接口的对象,为异常测试提供了更大的灵活性。
升级到 0.9 版本的注意事项
0.9 版本对代码生成器进行了完全重写,因此任何深度集成 Mockery 的代码都需要重新评估兼容性。
升级到 0.8 版本的注意事项
0.8.0 版本引入了一些行为变更,最值得注意的是:
shouldIgnoreMissing 行为变更
在 0.8.0 之前,shouldIgnoreMissing()
会返回 \Mockery\Undefined
实例作为未定义方法的返回值。0.8.0 版本改为返回 null
。
如果需要保持旧行为,可以使用:
$mock = \Mockery::mock('stdClass')->shouldIgnoreMissing()->asUndefined();
升级策略建议
- 逐步升级:不要一次性跨越多个主要版本,建议按照 0.8 → 0.9 → 1.0 的顺序逐步升级
- 全面测试:升级后运行完整的测试套件,特别注意模拟对象相关的测试用例
- 关注弃用警告:注意运行时产生的弃用警告,它们会提示需要修改的代码
- 文档参考:详细阅读对应版本的文档,了解所有行为变更
结语
Mockery 的版本升级带来了许多改进和新特性,虽然需要一些适配工作,但这些变更总体上使框架更加健壮和易用。遵循本文的指导,你应该能够顺利完成升级过程。如果在升级过程中遇到特殊问题,建议查阅对应版本的详细变更日志以获取更多信息。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考