Менеджер сущностей Symfony2 в тестах - PullRequest
4 голосов
/ 04 апреля 2011

Я пишу юнит-тесты для проекта 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.Я не уверен, что это правильный способ создания макетов (создание этих громоздких макетов кажется мне неудобным).Буду рад любым советам.

1 Ответ

1 голос
/ 27 мая 2011

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

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

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

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

...