Написание модульного теста для службы - PullRequest
0 голосов
/ 05 декабря 2018

Попытка модульного тестирования PHP.Я прочитал документацию PHPUnit и посмотрел видео Sandi Metz о модульном тестировании , но у меня возникают трудности с применением всего этого в сценарии реального мира.

Я решилдля модульного тестирования моего CallReceiver класса, который принимает некоторые параметры и передает сущность в хранилище для сохранения:

final class CallReceiver {

   private $CallRepository;

   public function __construct( CallRepository $CallRepository ) {

    $this->CallRepository = $CallRepository;
   }

   public function receive( string $uuid, string $Destination, string $Caller ) : void {

    $Call = Call::receive(
        CallId::createValidated( $uuid ),
        DestinationNumber::createValidated( $Destination ),
        $Caller
    );

    $this->CallRepository->save( $Call );
   }

}

Согласно Сэнди, мне нужно проверить, что сущность Call отправляется CallRepository (исходящая команда).Так что я полагаю, что мне придется издеваться над Call и CallRepository:

public function testReceive() {

    $CallRepository = $this->getMockBuilder(CallRepository::class)
        ->setMethods(['save'])
        ->getMock();

    $Call = $this->createMock(Call::class);

    $CallRepository->expects($this->once())
        ->method('save')
        ->with($this->equalTo($Call));

    $CallReceiver = new CallReceiver( $CallRepository );

    $CallReceiver->receive( '123', '456', '789' );

}

Но это не сработает.Как бы я написал содержательный тест для метода CallReveiver::receive?

...