如何解决PHP-Runkit的替代品,用于拦截方法调用
| 我有一些非常需要测试的代码(至少可以说),我需要测试。不幸的是,重构不是一种选择。我必须按原样测试代码,而不能更改它。 为此,我正在考虑拦截函数调用并动态更改它们的操作,以便可以运行测试,因为我需要一些函数和方法来返回已知值,并且我需要其他函数和方法来进行请求,连接到数据库等。 ,停止这样做并返回我需要他们返回的东西。没有without0ѭ,有什么方法可以做到这一点?preferably0最好不是\“ EXPERIMENTAL \”并仍然保持?也许可以替代runkit?也许更好的方法? 编辑:如果需要,将使用PHPUnit \的测试双打和PHP 5.3.2 \的功能使私有方法可访问。解决方法
注意:Test-Helper扩展已由https://github.com/krakjoe/uopz取代
PHPUnit的Test Helper扩展(PECL)允许通过您自己的实现重新定义/拦截/存根/模拟硬编码的依赖项:
protected function setUp()
{
$this->getMock(
\'Bar\',/* name of class to mock */
array(\'doSomethingElse\'),/* list of methods to mock */
array(),/* constructor arguments */
\'BarMock\' /* name for mocked class */
);
set_new_overload(array($this,\'newCallback\'));
}
它还允许拦截exit语句和实例创建:
https://github.com/sebastianbergmann/php-test-helpers
对于存根和模拟方法,您只需使用PHPUnit \的常规模拟框架。看到
http://www.phpunit.de/manual/current/en/test-doubles.html
您还可以将Mockery与PHPUnit结合使用:
https://github.com/padraic/mockery
另一种选择是使用http://antecedent.github.io/patchwork
Patchwork是一个PHP库,可以在运行时重新定义用户定义的函数和方法,以纯PHP 5.3代码轻松地复制功能runkit_function_redefine
,其中,除其他外,您可以用测试双精度替换静态和私有方法。
, Runkit扩展是满足您需求的完美解决方案。我多年的个人经验证明了这一点,并在互联网上由不同作者撰写的许多演示文稿和文章中进行了描述。
我可以向您保证,runkit_method_redefine函数以及整个runkit扩展都不再具有实验性(托管在php.net上的文档已过时)。
最新的runkit扩展可以在http://github.com/zenovich/runkit中找到
真诚的
德米特里·泽诺维奇(Dmitry Zenovich)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。