Менеджер сущностей Symfony2 в тестах

Я пишу модульные тесты для проекта symfony2. Например, я хочу протестировать некоторый класс, который требует наличия Doctrine\ORM\EntityManger:

// Class for testing
// ...
class CategoryManager
{
   public function __construct( EntityManager $em )
   {
       // ...

Итак, мне нужно создать экземпляр Doctrine\ORM\EntityManager в моих модульных тестах и ​​передать его конструктору следующим образом:

// Testing
// ...
$category1 = new Category();
$category2 = new Category();
$categories = array( $category1, $category2 );
$query = $this->getMock( '\Application\BackendBundle\Tests\Mocks\Doctrine\ORM\Query', array(), array(), '', false );
$query->expects( $this->any() )
      ->method( 'getResult' )
      ->will( $this->returnValue( $categories ) );
$em = $this->getMock( 'Doctrine\ORM\EntityManger', array(), array(), '', false );
$em->expects( $this->any() )
   ->method( 'createQuery' )
   ->will( $this->returnValue( $query ) );
// ...

Пожалуйста, дайте мне совет, как улучшить и автоматизировать создание макета entity_manager. Я не уверен, что это правильный способ создания моков (создание этих громоздких моков кажется мне неудобным). Буду рад любому совету.


person Aleksei Kornushkin    schedule 04.04.2011    source источник


Ответы (1)


Похоже, вы тестируете метод, который начинается с получения пары категорий, а затем что-то с ними делает. Если это так, не могли бы вы разделить метод?

Один из способов запроса базы данных с помощью $em, getACoupleOfCategories(), который можно протестировать с помощью теста базы данных если вы действительно хотите (хотя простой метод запроса не должен нуждаться в модульном тестировании, если вы уверены, что запрос делает то, для чего он предназначен)

А затем еще один метод, doSomethingWithThem($categories) которому при тестировании вы можете просто передать категории напрямую?

Или это не сработает для того, что вы пытаетесь сделать?

person Jeremy Warne    schedule 27.05.2011