这是一个代码示例:
class TestTest extends \PHPUnit_Framework_TestCase
{
public function testFirst() {
$factory_mock =
$this->getMockBuilder('Factory')
->disableOriginalConstructor()
->disableOriginalClone()
->getMock();
$factory_mock
->expects($this->any())
->method('getData')
->will($this->returnValue('123'));
var_dump($factory_mock->getData());
var_dump($factory_mock->getData());
return $factory_mock;
}
/**
* @depends testFirst
*/
public function testSecond(Factory $factory) {
var_dump($factory->getData());
}
}
这是我们得到的结果:
.string(3) "123"
string(3) "123"
.NULL
我希望第三个“getData”方法调用给出与前两个相同的结果,但不会发生。我不明白为什么。请分享您对PhpUnit内部运作的了解。
PHPUnit v3.7.29,PHP v5.4.23
答案 0 :(得分:1)
如果你在两个测试中都做了var_dump
模拟工厂,你会看到第一个有PHPUnit_Framework_MockObject_InvocationMocker
,第二个测试中属性为null。测试完成运行后,模拟的方法将被重置。所以你最终会得到一个没有设置方法的模拟。