0

リポジトリに次のメソッドがあり、テストしたい

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();
    }
}
4

2 に答える 2

0

Symfony の公式ドキュメントから、リポジトリ メソッドは次のようにテストする必要があります。

// 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();
    }
}
于 2016-03-09T14:07:45.907 に答える
0

このコードで何を編集する必要があるかを確認するには、testSearchByCatergory()から始めることをお勧めします。この例では、テストされたメソッドの結果を取得し、$productsこのコレクションに要素が 1 つしか含まれていないことを確認します。

したがって、あなたのテストは、返されたオブジェクトが返されると予想されるものであることをテストすることになると思います。しかし、@cheesemacflyが言ったように、あなたのレポはちょっと同じfindOne[ById]()です...ああ、ところで、phpunit [EN]またはコメントで見たようにFRで)ドキュメントをチェックして、どのように作成する必要があるかを確認する必要があります走る。

乾杯。:)

于 2013-05-26T01:29:17.820 に答える