Как правильно покрывать код тестами?

Разрабатываю свой smsBundle и решил научиться грамотно писать тесты. В процессе возникли вопросы. Собственно, вот один из моих примеров теста - https://github.com/manyrus/SmsBundle/blob/ba6a45cd... для класса https://github.com/manyrus/SmsBundle/blob/ba6a45cd... . Не слишком ли много кода? А то эта монструозность меня пугает. И что делать с дублированием кода? Особенно волнует один момент. Стоит ли делать вот такую проверку коллбэком:
$obj = $this;//php 5.3 support

$eventDispatcher = $this->getMock('\Symfony\Component\EventDispatcher\EventDispatcher');

$sms = $this->getSmsMessage();

$eventDispatcher
    ->expects($this->at(0))
    ->method('dispatch')
    ->with($this->equalTo(MergeEvents::ON_MERGE)
        , $this->isInstanceOf('Manyrus\SmsBundle\Lib\Event\MergeEvent'))
    ->will($this->returnCallback(
         function($name,MergeEvent $mergeEvent) use($sms, $obj){
             $obj->assertEquals($mergeEvent->getMessage(), $sms);
         }
    ));
//где-нибудь в другом классе, куда подставили $eventDispatcher
public function send(SmsMessage $sms) {
    //some action

    $event = new MergeEvent();
    $event->setSmsMessage($sms);
    $this->dispatcher->dispatch(MergeEvents::ON_MERGE, $event);
}
  • Вопрос задан
  • 3085 просмотров
Пригласить эксперта
Ответы на вопрос 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Дублирование кода в тестах нужно устранять. Почитайте XP Programming Кента Бэка, он там затрагивал вопрос касательно рефакторига тестов, как часто его нужно делать и т.д.

По поводу монструозности, ну а что ж поделать если вам нужно мокать сервисы? По сути если убрать дублирование и вынести все в методы хелперы, то не так уж и страшно выходит.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы