Joh*_*ith 1 php phpunit mocking
所以,一个函数:
function testMe ($a, $b)
{
$obj = new CalculationObject();
return $obj->calcIt ($a, $b);
}
Run Code Online (Sandbox Code Playgroud)
如何嘲笑这个创作?
重构该函数以分离对象创建和对象使用。
如果这是类的方法,那么简单的解决方案是创建$obj
一个类属性,以便您可以用模拟替换它。
如果你总是需要一个新的实例CalculationObject
,可以使用工厂模式。
function testMe ($a, $b)
{
$obj = $this->factory->getNewCalculationObject();
return $obj->calcIt ($a, $b);
}
Run Code Online (Sandbox Code Playgroud)
然后替换$this->factory
为返回您的模拟的存根getNewCalculationObject()
。
如果这确实是一个过程函数,而不是一个方法,则需要将依赖项传递给该函数:
function testMe ($a, $b, $factory)
{
$obj = $factory->getNewCalculationObject();
return $obj->calcIt ($a, $b);
}
Run Code Online (Sandbox Code Playgroud)
您可以默认使用普通工厂来使其向后兼容您当前的实现:
function testMe ($a, $b, $factory = null)
{
if ($factory === null) {
$factory = new CalculationObjectFactory();
}
$obj = $factory->getNewCalculationObject();
return $obj->calcIt ($a, $b);
}
Run Code Online (Sandbox Code Playgroud)
如果这对您来说看起来有点笨拙,请考虑将该函数移到一个类中。
归档时间: |
|
查看次数: |
824 次 |
最近记录: |