Как создавать тесты с сущностями Doctrine, не сохраняя их (как установить id)
Я работаю над тестами для проекта Symfony2, и сейчас я ищу способ создать тесты, включающие объекты-сущности без их сохранения. Проблема в:Я бы это приватное поле и для этого нет сеттера. Я могу создать новый объект и установить некоторые свойства, но я не могу проверить что-либо с участиемGetId () звонки.
$entity = new TheEntity();
// Can't set ID!
$entity->setProperty('propertyValue');
$name = $entity->getProperty(); // OK
$id = $entity->getId(); // not OK - null
Решения, о которых я знаю:
Инициализация всего ядра (Symfony'sWebTestCase :: createKernel ()) и сохранение сущностейСоздание фиктивного объекта для каждого объекта, который будет возвращать действительный идентификаторХаки как статический метод вОрганизация класс, возвращающий инициализированный объект, или добавляющий сеттер дляЯ бы полеКаков рекомендуемый способ справиться с этим, как получить сущность для тестирования чистым и быстрым способом с установленным идентификатором?
редактировать
Оказалось, я могу решить это с насмешкой ... извините, я все еще учусь. Я искал чистый, стандартный, но быстрый способ добиться цели. Однако я забыл о втором параметреgetMock()
- этоМне не нужно издеваться над каждым методом сущности, которую я собираюсь использовать, Я хотел избежать множественного->expects()->method()->will()
и т.д. И это достигается путем добавления:array('getId')
, Этот вспомогательный метод решает проблему:
protected function getEntityMock($entityClass, $id)
{
$entityMock = $this->getMock($entityClass, array('getId'));
$entityMock
->expects($this->any())
->method('getId')
->will($this->returnValue($id));
return $entityMock;
}
При создании многих сущностей одного и того же класса, конечно, все можно упростить с помощью более вспомогательных методов, таких как этот:
protected function getTheEntityMock($id)
{
return $this->getEntityMock('\The\NameSpace\TheEntity', $id);
}
Единственныйограничение является то, что сама сущность не может использоватьid
собственность, толькоgetId()
добытчик.
Любой ценный вклад по-прежнему приветствуется, но я верю PHPUnit'sgetMock()
решил это хорошо.