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

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

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

Например:

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.

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

Русский разработчик с 20-ти летним стажем. Работаю с PHP, ООП, JavaScript, Git, WordPress, Битрикс, Joomla, Drupal, OpenCart, DLE, Laravel, Moonshine, Symfony, SuiteCRM.

Оптимизирую сайты под Google Page Speed, настраиваю импорты для больших магазинов на WooCommerce + WP All Import. Пишу плагины на заказ. Все мои услуги.

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

Вы всегда можете нанять меня.

Комментарии
Подписаться
Уведомить о
guest

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
Предыдущая запись

Давайте дружить
в Telegram

Авторский блог вашего покорного слуги в Telegram про web, программирование, алгоритмы, инструменты разработчика, WordPress, Joomla, Opencart, Laravel, Moonshine, фильмы и сериалы