所以,一个功能:
function testMe ($a, $b)
{
$obj = new CalculationObject();
return $obj->calcIt ($a, $b);
}
如何模仿这个创作?
答案 0 :(得分:4)
重构函数以分离对象创建和对象使用。
如果这是一个类的方法,那么简单的解决方案就是使$obj
成为一个类属性,这样你就可以用mock替换它。
如果您总是需要CalculationObject
的新实例,则可以使用工厂模式。
function testMe ($a, $b)
{
$obj = $this->factory->getNewCalculationObject();
return $obj->calcIt ($a, $b);
}
然后将$this->factory
替换为返回getNewCalculationObject()
模拟的存根。
如果这是一个过程函数,而不是一个方法,则需要将依赖项传递给函数:
function testMe ($a, $b, $factory)
{
$obj = $factory->getNewCalculationObject();
return $obj->calcIt ($a, $b);
}
默认情况下,您可以使用普通工厂使其向后兼容当前的实现:
function testMe ($a, $b, $factory = null)
{
if ($factory === null) {
$factory = new CalculationObjectFactory();
}
$obj = $factory->getNewCalculationObject();
return $obj->calcIt ($a, $b);
}
如果这看起来有点笨拙,请考虑将该功能移到一个类中。