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

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

Объект абстрактного класса мы не можем создать напрямую. Поэтому работать с ним будем через 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.

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

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

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

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

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

Комментарии