2015-08-23 2 views
1

Я хочу высмеять конструктор, как и любые другие методы. Я также добавил предложение willReturnCallback, которое, похоже, не работает. Я имею в виду, что все это работает с методами, но не с конструктором.PHPUnit, mock constructor?

$mock = $this->getMock ('MyClass', array(), array(), '', false); 
$mock->expects($this->once())->method('__construct')->willReturnCallback(function() { echo 'outputt'; }); 

такой издевательский конструктор не имеет никакого эффекта.

+0

да, «реорганизовать код» - его наследство код .... –

+1

возможно дубликата [аргументы конструктора избежать PHPUnit для фиктивного] (HTTP : //stackoverflow.com/questions/279493/phpunit-avoid-constructor-arguments-for-mock) –

+1

Исходный конструктор вызывается во время макетной конструкции (он просто вызывает конструктор baseclass)). Если вы этого не хотите, вы также можете отключить его. Однако, интересно, почему вы хотите издеваться над конструктором? Дело в том, что, если вы явно не назовете его (это будет запах кода), создание макета делает конструкцию, поэтому слишком поздно ожидать вызова конструктора! –

ответ

1

Добавления соответствующих комментариев, как сообщества вики ответ, потому что никогда не будет другим ответа, чем «логически не возможно»:

оригинальный конструктор вызываются при макете строительства (он просто вызывает конструктор базового класса). Если вы этого не хотите, вы также можете отключить его. Однако, интересно, почему вы хотите издеваться над конструктором? Дело в том, что если вы явно не называть его (что бы кодом запах), создавая макет делает конструкцию, так что это слишком поздно, чтобы ожидать вызов конструктора

Кроме того, все ограничения насмешливого, контроллера конструктора может никогда не вернуть ничего, так что фиктивное ничего не значит в данный момент