比如说我有这样一个类:
class Foo {
public function add($x, $y)
{
return $x + $y;
}
public function subtract($x, $y)
{
return $x - $y;
}
}
,我只想改变add方法的行为:
$mock = $this->getMock('Foo');
$mock->expects($this->once())->method('add')->will($this->returnCallback(function ($x, $y) {
return ($x + 0) + ($y + 0);
}));
$this->assertEquals(4, $mock->add(2,2));
$this->assertEquals(2, $mock->subtract(4,2));
为什么我的减法现在返回null?我还以为它会正常呢。
Failed asserting that null matches expected 2.
您需要对getMock进行部分模拟,指定要模拟的方法:
$mock = $this->getMock('Foo', array('add');
通过这种方式,只有add方法被模拟,对象的其余部分正常运行。
像这样使用:
$mock = m::mock('Foo[add]');