Тестирование объектов с извращениями в конструкторе

Иногда разработчики добавляют в конструктор какие-то нежелательные эффекты, вызовы разных способов или зависимости с иными объектами.

Например:

class Duck {public function __construct() {$this->life = new Life();}public function say() {echo 'quack'. PHP_EOL;}}

Для того, чтобы протестировать способ say() нам необходимо как-то замокать new Life при помощи заглушек для Hard Dependency или избавится от вызова конструктора. Второй вариант лучше т.к. тесты будут выполняться в разы быстрее:

use PHPUnit\Framework\TestCase;class Test_Duck extends TestCase {public function tearDown(): void {Mockery::close();parent::tearDown();}public function test_say() {$duck = Mockery::mock( 'Duck')->makePartial();$duck->say();}}

Способ makePartial в Mockery::mock( 'Duck') возвращает инстанс без вызова конструктора.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *