PHPUnit Mockupbuilder正确传递返回值

时间:2013-11-11 16:39:38

标签: php phpunit

我发现了一些使用模型构建器的奇怪行为,有人可以向我解释为什么会发生这种情况吗?

这是我的测试代码:

class PlaceTest extends \PHPUnit_Framework_TestCase
{
    const API_KEY = 'test-api';

    public function testConstruct()
    {
        $google = $this->getMockBuilder('GusDeCooL\GooglePhp\Google')
            ->setConstructorArgs(array(self::API_KEY))
                            ->setMethods(array('getKey'))
            ->getMock();
        $google->expects($this->any())
            ->method('getKey')
            ->will($this->returnValue(self::API_KEY));

        /* @var $google \GusDeCooL\GooglePhp\Google */
        $place = new Place($google);
        $this->assertInstanceOf('GusDeCooL\GooglePhp\Component\Place\Place', $place);
        $this->assertInstanceOf('GusDeCooL\GooglePhp\Google', $place->getParent());
        $this->assertEquals(self::API_KEY, $place->getKey());
        return $place;
    }



    /**
     * @param Place $place
     *
     * @depends testConstruct
     */
    public function testGetKey(Place $place)
    {
        $this->assertInstanceOf('GusDeCooL\GooglePhp\Google', $place->getParent());
        $this->assertEquals(self::API_KEY, $place->getKey());
    }
}

这是实际类的代码

<?php



namespace GusDeCooL\GooglePhp\Component\Place;

use GusDeCooL\GooglePhp\Component\ChildInterface;
use GusDeCooL\GooglePhp\Google;
use GusDeCooL\GooglePhp\Place\Nearby;

class Place implements ChildInterface
{
    /**
     * @var Google
     */
    private $parent;

    /**
     * @var Nearby
     */
    private $nearby;

    public function __construct(Google $parent)
    {
        $this->setParent($parent);
    }


    /**
     * API Key
     * @return string
     */
    public function getKey()
    {
        return $this->getParent()->getKey();
    }
}

在运行测试时,PlaceTest::testConstruct()在执行$place->getKey()时会通过测试,但在PlaceTest::testGetKey()

中出错

这是怎么回事?

1 个答案:

答案 0 :(得分:0)

这似乎是模型构建器的限制。 http://phpunit.de/manual/3.7/en/test-doubles.html

我们无法将模型对象传递到另一个测试范围。

如果您发现其他原因,请发表评论。

enter image description here