Попытка модульного тестирования 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
?