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

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

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

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

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