跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

如何解决PHP单元测试中访问私有成员的问题?使用WikimediaTestingAccessWrapper库可以!

可以通过以下地址学习 composer : 学习地址 在进行PHP单元测试时,常常会遇到一个棘手的问题:如何访问类中的私有属性和方法?这些非公共元素的存在是为了封装数据和行为,但它们也给测试带来了一定的挑战。通常,我们需要通过反射(Reflection)来绕过这些限制,但这种方法既复杂又容易出错。就在我苦于寻找一个更简便的方法时,我发现了Wikimedia Testing Access Wrapper库。 Wikimedia Testing Access Wrapper是一个专为单元测试设计的辅助类,它通过简化反射操作,让我们可以轻松访问非公共的属性和方法。这个库最初是MediaWiki的一部分,但现在已经独立出来,供所有PHP开发者使用。 使用Composer安装Wikimedia Testing Access Wrapper非常简单:
composer require wikimedia/testing-access-wrapper
让我们来看一个使用示例: 立即学习 “ PHP免费学习笔记(深入) ”; Composer 2.9.6 Composer 2.9.6 是 PHP 生态中高效、稳定的依赖管理工具。此版本在性能与兼容性上进一步优化,改进了依赖解析算法,提升大型项目中的安装与更新速度。它支持并行下载任务,显著减少等待时间,并增强了与私有仓库及镜像源的交互稳定性。同时修复了多项命令行交互与内存使用相关的缺陷,确保在复杂依赖关系下依然可靠运行。无论是新项目初始化还是现有系统维护,Composer 2.9.6 都能为开发者提供流畅、精准的依赖管理体验。 下载
use Wikimedia\TestingAccessWrapper; class NonPublic { protected $prop; protected const CONSTANT = 4; protected function func() {} protected static function staticFunc() {} } class NonPublicCtor { protected function __construct() {} } $object = new NonPublic(); // 或: // $object = TestingAccessWrapper::construct( NonPublicCtor::class ); $wrapper = TestingAccessWrapper::newFromObject( $object ); $classWrapper = TestingAccessWrapper::newFromClass( NonPublic::class ); $wrapper->prop = 'foo'; $wrapper->func(); $classWrapper->staticFunc(); $value = TestingAccessWrapper::constant( NonPublic::class, 'CONSTANT' );
这个库提供了几种方便的方法:
newFromObject($object)
:创建一个包装器,允许访问对象的非公共成员。
newFromClass($className)
:创建一个包装器,允许访问类静态成员。
construct($className, ...$args)
:创建一个类的实例,即使构造函数是受保护或私有的。
constant($className, $name)
:获取类的常量值。 使用Wikimedia Testing Access Wrapper库后,我的单元测试变得更加简洁和高效。我不再需要编写复杂的反射代码,只需几行简单的调用就能访问到需要测试的非公共元素。 总的来说,Wikimedia Testing Access Wrapper库不仅简化了单元测试的编写过程,还提高了测试的覆盖率和准确性。如果你在PHP单元测试中也遇到了类似的困扰,不妨试试这个库,它一定会让你大吃一惊的!

相关文章