在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();
...
}
}
答案 0 :(得分:0)
当您指定不想使用$accountStub->__construct()
调用原始构造函数时,我对->disableOriginalConstructor()
尝试做什么感到困惑?
您可以自己调用构造函数并使用setConstructorArgs(array $args)
传递参数。所以这看起来像这样:
$accountStub = $this->getMockBuilder('Account')
->setConstructorArgs($args)
->getMock();
然而,与disableOriginalConstructor()
同时调用它是没有意义的。我想你可能想做其中一个。
我相信你得到的错误信息只是PHP告诉你,你正在尝试做一些没有意义的事情。您正在尝试在已构造的对象上调用构造函数。更重要的是,你甚至特意告诉模拟者跳过对构造函数方法的调用。 PHP只是告诉你这个方法不存在。
我想您可能只需要删除以下行并再次测试:
$accountStub->__construct();