Написание тестов для службы Symfony2, использующей базу данных

#symfony

#symfony

Вопрос:

Я создаю небольшой пакет для Symfony2, который не делает ничего, кроме предоставления службы; его можно вызвать, чтобы вставить строку в базу данных, содержащую несколько параметров:

 class AuditLogService {

 private $em;

 public function __construct(EntityManager $em)
 {
  $this->em = $em;
 }  

 public function log($type, $channel, $message) {
  $log = new AuditLog();
  $log->setType($type);
  $log->setChannel($channel);
  $log->setMessage($message);
  $this->em->persist($log);
  $this->em->flush();
 }
}
  

Теперь мне нужно написать для него тест, поэтому в основном вот шаги, которые, как я предполагаю, я должен предпринять:

  1. написать тест, который получает службу logger, но вместо этого использует макет entityManager ?

  2. вызов функции в том регистраторе, который использует издевательский em

  3. попробуйте извлечь его обратно из модифицированного em, используя параметры, которые я использовал на шаге 2

  4. подтвердите, нахожу я результат или нет

Я почти уверен, что теоретически это правильные шаги, но может ли кто-нибудь указать мне правильное направление относительно того, как на самом деле это сделать?

У меня есть это:

 public function testServiceLoaded()
    {
       $this->assertEquals(get_class($this->container->get('bbit_audit_log.service')), 'BBITAuditLogBundleServicesAuditLogService');
    }
  

Это возвращается со следующей ошибкой:

«bbit_audit_log.service» зависит от несуществующей службы «doctrine.orm.entity_manager»

Похоже, что мой контейнер не содержит entitymanager ?

Ответ №1:

В модульном тестировании пропустите 3 и 4. AuditLogService не несет ответственности за сохранение в базе данных (но за их вызов). 3 и 4 следует протестировать с помощью функционального теста.