Mockery 升级指南:从旧版本迁移到新版本的最佳实践

Mockery 升级指南:从旧版本迁移到新版本的最佳实践

mockery Mockery是一个针对PHP的轻量级模拟对象框架,专为进行依赖注入和隔离测试设计,通过创建模拟对象替代真实依赖,使得单元测试更便捷、高效。 mockery 项目地址: https://gitcode.com/gh_mirrors/mo/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 版本中,推荐采用以下两种新方式:

  1. 使用 \Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration trait
  2. 继承 \Mockery\Adapter\Phpunit\MockeryTestCase 测试基类

这两种方式都会自动处理 Mockery 的清理工作,使测试代码更加简洁。

废弃的 MustBe 匹配器

\Mockery\Matcher\MustBe 匹配器在 1.0.0 版本中被标记为废弃,并将在 2.0.0 版本中移除。建议开发者转而使用 PHPUnit 提供的等效匹配器。

新增的 allows 和 expects 方法

1.0.0 版本引入了两个新方法 allowsexpects 来设置期望。这意味着:

  • 这两个方法名现在是 Mockery 的保留关键字
  • 你希望模拟的类不能包含同名的 allowsexpects 方法

字符串参数匹配行为的变更

在 0.9.x 及更早版本中,Mockery 在匹配字符串参数时会尝试使用正则表达式作为最后的匹配手段。

1.0.0 版本中这一行为被移除,现在仅会尝试:

  1. 严格相等比较(===)
  2. 宽松相等比较(==)

如果需要正则表达式匹配,应该使用新的 \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();

升级策略建议

  1. 逐步升级:不要一次性跨越多个主要版本,建议按照 0.8 → 0.9 → 1.0 的顺序逐步升级
  2. 全面测试:升级后运行完整的测试套件,特别注意模拟对象相关的测试用例
  3. 关注弃用警告:注意运行时产生的弃用警告,它们会提示需要修改的代码
  4. 文档参考:详细阅读对应版本的文档,了解所有行为变更

结语

Mockery 的版本升级带来了许多改进和新特性,虽然需要一些适配工作,但这些变更总体上使框架更加健壮和易用。遵循本文的指导,你应该能够顺利完成升级过程。如果在升级过程中遇到特殊问题,建议查阅对应版本的详细变更日志以获取更多信息。

mockery Mockery是一个针对PHP的轻量级模拟对象框架,专为进行依赖注入和隔离测试设计,通过创建模拟对象替代真实依赖,使得单元测试更便捷、高效。 mockery 项目地址: https://gitcode.com/gh_mirrors/mo/mockery

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

强苹旖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值