Верх страницы
Обложка к записи Тестирование объектов с извращениями в конструкторе
Время для прочтения: 1 мин. 35 сек.

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

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

Например:

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' ) возвращает инстанс без вызова конструктора.

Источник: WP Punk.

ВКонтакте
Одноклассники
Linkedin
Telegram
WhatsApp

Автор: Кобзарёв Михаил

Суровый русский тимлид. Жил в Магадане, в офисе московских веб студий и в Тульской деревне. Виртуозно знает WordPress, PHP, ООП, Vue.js и вот это вот все.

Делает крутые высоконагруженные сайты, поэтому уже почти захватил весь рынок WordPress разработки в России. Не дает никому делать сайты без спроса.

Ведет блог о разработке, дайджест в телеграмме и в ВК.

Комментарии
Предыдущая запись