#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();
}
}
Теперь мне нужно написать для него тест, поэтому в основном вот шаги, которые, как я предполагаю, я должен предпринять:
-
написать тест, который получает службу logger, но вместо этого использует макет
entityManager
? -
вызов функции в том регистраторе, который использует издевательский em
-
попробуйте извлечь его обратно из модифицированного em, используя параметры, которые я использовал на шаге 2
-
подтвердите, нахожу я результат или нет
Я почти уверен, что теоретически это правильные шаги, но может ли кто-нибудь указать мне правильное направление относительно того, как на самом деле это сделать?
У меня есть это:
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 следует протестировать с помощью функционального теста.