yii phpunit getMockBuilder不使用--filter
在一个Yii项目中,我将phpunit与getMockbuilder一起使用。当我对整个文件运行单元测试时,它们都通过了。但是,当我执行phpunit--filter testMyFunction时,我得到以下错误。“调用未定义的方法Mock_Account_3a811374::_构造()…” 在做了更多的检查之后,我发现如果--filter最终包括一个不使用mock的测试以及一个使用mock的测试,那么它就可以正常工作 有人对如何修复它有什么想法吗 下面是我的一些代码(简化)yii phpunit getMockBuilder不使用--filter,php,yii,mocking,phpunit,Php,Yii,Mocking,Phpunit,在一个Yii项目中,我将phpunit与getMockbuilder一起使用。当我对整个文件运行单元测试时,它们都通过了。但是,当我执行phpunit--filter testMyFunction时,我得到以下错误。“调用未定义的方法Mock_Account_3a811374::_构造()…” 在做了更多的检查之后,我发现如果--filter最终包括一个不使用mock的测试以及一个使用mock的测试,那么它就可以正常工作 有人对如何修复它有什么想法吗 下面是我的一些代码(简化) 当您指定不希望使
当您指定不希望使用
->disableOriginalConstructor()
调用原始构造函数时,我对您试图对$accountStub->\uuu construct()执行的操作感到困惑
您可以自己调用构造函数并使用setConstructorArgs(数组$args)
传递参数。这看起来像这样:
$accountStub = $this->getMockBuilder('Account')
->setConstructorArgs($args)
->getMock();
但是,与disableOriginalConstructor()
同时调用它是没有意义的。我想你可能想做一个或另一个
我相信您收到的错误消息只是PHP告诉您您正在尝试做一些没有意义的事情。您正在尝试对已构造的对象调用构造函数。更重要的是,您甚至特别告诉mock跳过对构造函数方法的调用。PHP只是告诉您这个方法不存在
我认为您可能只需要删除以下行并再次测试:
$accountStub->__construct();
是不是因为您使用模拟构建器禁用了原始构造函数而得到了这个结果?这就是为什么在测试整个文件时它会工作的原因@阿瑞斯德拉古纳,我认为它应该是这样的。我需要能够禁用原始构造函数并稍后调用它。嗯,$this->betMockBuilder('Account')
我认为它应该是$this->getMockBuilder('Account')
如果你想使用u构造,你也应该模拟它。@Jhn,我不确定你的意思。如何使用_构造并模拟它?我不是嘲笑它就是使用它,对吗?我的测试需要能够调用real _构造函数。当调用整个测试类时,它们工作得很好,但当使用--filter testmyfunction调用一个测试函数时,它们就失效了如果我没记错的话,使用disableOriginalConstructor
的想法是避免在getMock()
调用时调用构造函数。它需要等到expects
节之后,然后被调用。正如我前面提到的,当调用整个测试类时,测试工作正常,但是当使用--filter testmyfunction调用一个测试函数时,测试就失效了,谢谢您的澄清。你能分享其他测试的代码吗?听起来像是在前面的一个测试中做了什么,导致上面的测试在按顺序运行时通过。在测试之间的设置/拆卸中未清除的某种状态。如果看不到完整的代码和其他测试中发生的情况,很难猜测这种状态可能是什么。
$accountStub->__construct();