2013-05-24 4 views
0

У меня есть следующий метод в моем хранилище, и я хочу, чтобы проверить еготест хранилище в Symfony

public function myFindOne($id) 
{ 
// On passe par le QueryBuilder vide de l'EntityManager pour l'exemple 
    $qb = $this->_em->createQueryBuilder(); 

    $qb->select('a') 
    ->from('xxxBundle:entity', 'a') 
    ->where('a.id = :id') 
    ->setParameter('id', $id); 

    return $qb->getQuery() 
       ->getResult();} 

Я нашел следующий код в документации, но я не мог понять его

// src/Acme/StoreBundle/Tests/Entity/ProductRepositoryFunctionalTest.php 
namespace Acme\StoreBundle\Tests\Entity; 

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; 

class ProductRepositoryFunctionalTest extends WebTestCase 
{ 
    /** 
    * @var \Doctrine\ORM\EntityManager 
    */ 
    private $em; 

    /** 
    * {@inheritDoc} 
    */ 
    public function setUp() 
    { 
     static::$kernel = static::createKernel(); 
     static::$kernel->boot(); 
     $this->em = static::$kernel->getContainer() 
      ->get('doctrine') 
      ->getManager() 
     ; 
    } 

    public function testSearchByCategoryName() 
    { 
     $products = $this->em 
      ->getRepository('AcmeStoreBundle:Product') 
      ->searchByCategoryName('foo') 
     ; 

     $this->assertCount(1, $products); 
    } 

    /** 
    * {@inheritDoc} 
    */ 
    protected function tearDown() 
    { 
     parent::tearDown(); 
     $this->em->close(); 
    } 
} 
+3

Так же, как примечание, если вам нужен один элемент по идентификатору или любой другой области, вы можете просто использовать '$ this- -> getDoctrine() -> getRepository ('AcmeStoreBundle: Product') -> findOneById ($ id) '. (вы можете заменить 'findOneById' на' findOneByName' или любое другое имя поля, которое вы хотите использовать.) – cheesemacfly

+0

, а как насчет tearDown и так далее? @cheesemacfly –

+0

Другой вопрос также в том, как его выполнить? @cheesemacfly –

ответ

0

Чтобы посмотреть, что вы должны изменить в этом коде, testSearchByCatergory() должен стать хорошим началом. В этом примере он получает результат тестируемого метода в $products и проверяет, что эта коллекция содержит только один элемент.

Так что, я думаю, ваш тест должен был проверить, что возвращаемый объект является тем, который вы ожидаете вернуть. Но хе-хе, например, @cheesemacfly сказал, что ваше репо - это то же самое, что и findOne[ById]() ... О, и BTW, вы должны проверить документацию phpunit [EN] (Or in FR, как я видел в вашем комментарии), чтобы увидеть, как вы должны ее запустить.

Cheers. :)

+0

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

0

Из Symfony's official documentation, хранилища метода должна быть проверена следующим образом:

// tests/AppBundle/Entity/ProductRepositoryTest.php 
namespace Tests\AppBundle\Entity; 

use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase; 

class ProductRepositoryTest extends KernelTestCase 
{ 
    /** 
    * @var \Doctrine\ORM\EntityManager 
    */ 
    private $em; 

    /** 
    * {@inheritDoc} 
    */ 
    protected function setUp() 
    { 
     self::bootKernel(); 

     $this->em = static::$kernel->getContainer() 
      ->get('doctrine') 
      ->getManager(); 
    } 

    public function testSearchByCategoryName() 
    { 
     $products = $this->em 
      ->getRepository('AppBundle:Product') 
      ->searchByCategoryName('foo') 
     ; 

     $this->assertCount(1, $products); 
    } 

    /** 
    * {@inheritDoc} 
    */ 
    protected function tearDown() 
    { 
     parent::tearDown(); 

     $this->em->close(); 
    } 
}