yii phpunit getMockBuilder没有使用--filter

时间:2014-10-06 13:16:39

标签: php yii mocking phpunit

在Yii项目中,我使用phpunit和getMockbuilder。当我对整个文件运行单元测试时,它们都通过了。但是,当我phpunit --filter testMyFunction时,我收到以下错误。 “调用未定义的方法Mock_Account_3a811374 :: __ construct()......”

在做了一些检查之后,我发现如果--filter最终包括一个不使用模拟的测试,那么它可以正常工作。

任何人对如何修复都有任何想法?

这是我的一些代码(简化)......

use components\Account;

class UtilsTest extends CDbTestCase
{
    ...
    public function testMyFunction()
    {
        $accountStub = $this->getMockBuilder('Account')
            ->disableOriginalConstructor()
            ->setMethods(array('methodToStub'))
            ->getMock();

        $accountStub->expects($this->any())
            ->method('methodToStub')
            ->will($this->returnValue(false));

        $accountStub->__construct();
    ...
    }
}

1 个答案:

答案 0 :(得分:0)

当您指定不想使用$accountStub->__construct()调用原始构造函数时,我对->disableOriginalConstructor()尝试做什么感到困惑?

您可以自己调用构造函数并使用setConstructorArgs(array $args)传递参数。所以这看起来像这样:

$accountStub = $this->getMockBuilder('Account')
        ->setConstructorArgs($args)
        ->getMock();

然而,与disableOriginalConstructor()同时调用它是没有意义的。我想你可能想做其中一个。

我相信你得到的错误信息只是PHP告诉你,你正在尝试做一些没有意义的事情。您正在尝试在已构造的对象上调用构造函数。更重要的是,你甚至特意告诉模拟者跳过对构造函数方法的调用。 PHP只是告诉你这个方法不存在。

我想您可能只需要删除以下行并再次测试:

$accountStub->__construct();