PhpUnit @depends注释和MockObject

时间:2014-01-31 13:55:31

标签: php phpunit

这是一个代码示例:

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

1 个答案:

答案 0 :(得分:1)

如果你在两个测试中都做了var_dump模拟工厂,你会看到第一个有PHPUnit_Framework_MockObject_InvocationMocker,第二个测试中属性为null。测试完成运行后,模拟的方法将被重置。所以你最终会得到一个没有设置方法的模拟。