В проекте 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();
...
}
}
Я смущен тем, что пытаются сделать с $accountStub->__construct()
когда вы указали, что не хотите вызывать оригинальный конструктор с ->disableOriginalConstructor()
?
Вы можете вызвать конструктор самостоятельно и передать параметры с setConstructorArgs(array $args)
, Так что это будет выглядеть примерно так:
$accountStub = $this->getMockBuilder('Account')
->setConstructorArgs($args)
->getMock();
Однако не имеет смысла называть это одновременно с disableOriginalConstructor()
, Я думаю, что вы, вероятно, хотите сделать одно или другое.
Я полагаю, что сообщение об ошибке, которое вы получаете, это просто PHP, говорящий вам, что вы пытаетесь сделать что-то, что не имеет смысла. Вы пытаетесь вызвать конструктор объекта, который уже был создан. Более того, вы даже специально указали макету пропустить вызов метода конструктора. PHP просто говорит вам, что этот метод не существует.
Я думаю, что вам, вероятно, просто нужно удалить следующую строку и протестировать снова:
$accountStub->__construct();
Других решений пока нет …