【发布时间】:2014-11-30 18:17:24
【问题描述】:
在一个 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();
...
}
}
【问题讨论】:
-
会不会是因为您使用模拟构建器禁用了原始构造函数?这就是为什么它在您测试整个文件时起作用的原因......?
-
@AresDraguna,我认为它应该可以工作。我需要能够禁用原始构造函数并稍后调用它。
-
嗯,
$this->betMockBuilder('Account')我觉得应该是$this->getMockBuilder('Account')如果你想使用 __construct 你也应该模拟它。 -
@Jhn,我不确定你的意思。我如何使用 __construct 并模拟它?我要么嘲笑它,要么使用它,对吧?我的测试需要能够调用真正的 __construct 函数。它们在调用整个测试类时工作正常,但在使用 --filter testMyFunction 仅调用一个测试函数时会死机