rid*_*rid 5 php reflection runkit
我有一些非常不友好的测试代码(至少可以说是我需要测试的).不幸的是,重构不是一种选择.我必须按原样测试代码,而不必更改它.
为此,我考虑拦截函数调用并动态更改它们的作用,以便我可以运行我的测试,因为我需要一些函数和方法来返回已知值,我需要其他人发出请求,连接到数据库等等,停止这样做,并返回我需要他们返回的东西.有没有办法做到这一点没有runkit_method_redefine(),这最好不是"实验",仍然保持?也许是runkit的替代品?也许更好的方式?
编辑:如果我需要该功能,将使用PHPUnit的测试双精度和PHP 5.3.2的功能来使私有方法可访问.
Gor*_*don 15
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'));
}
Run Code Online (Sandbox Code Playgroud)
它还允许拦截exit语句和实例创建:
对于存根和模拟方法,您只需使用PHPUnit的常规模拟框架.看到
您还可以将Mockery与PHPUnit一起使用:
另一种选择是使用http://antecedent.github.io/patchwork
拼布是一个PHP库,能够在运行时重新定义用户定义的函数和方法,松散的复制功能
runkit_function_redefine在纯PHP 5.3的代码,其中,除其他事项外,让你可以使用测试双打代替静态和私有方法.
| 归档时间: |
|
| 查看次数: |
4264 次 |
| 最近记录: |