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

Тестирование абстрактных методов

Объект абстрактного класса мы не можем создать напрямую. Поэтому работать с ним будем через stub. Что такое stub можно прочитать в статье про Модульное тестирование.

Пример абстрактного класса Abstract_Suit:

abstract class Abstract_Suit {

	abstract public function abstract_method();

}

Тестируем с помощью метода getMockForAbstractClass

use PHPUnit\Framework\TestCase;

class Test_Suit extends TestCase {

	public function test_abstract_class() {
		$stub = $this->getMockForAbstractClass( 'Abstract_Suit' );
		$stub->expects( $this->exactly( 1 ) )
		     ->method( 'abstract_method' )
		     ->will( $this->returnValue( 'abstract result' ) );

		$this->assertSame( 'abstract result', $stub->abstract_method() );
	}

}

Создаем stub для абстрактного класса Abstract_Suit:

$stub = $this->getMockForAbstractClass( 'Abstract_Suit' );

Ожидаем, что будет вызван 1 раз:

$stub->expects( $this->exactly( 1 ) )

Метод abstract_method:

->method( 'abstract_method' )

И будет возвращен результат abstract result:

->will( $this->returnValue( 'abstract result' ) );

Тестируем с помощью анонимных классов

use PHPUnit\Framework\TestCase;

class Test_Suit extends TestCase {

	public function test_abstract_class_by_anonymous() {
		$suit = new class extends Abstract_Suit {

			public function abstract_method() {
				return 'rewrite abstract result';
			}

		};

		$this->assertSame( 'rewrite abstract result', $suit->abstract_method() );
	}

}

В целом такой код более простой для понимания, но поддерживается только с версии PHP 7.0+.

Источник: 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, фильмы и сериалы