Home | Symfony2Doc »クックブック »テスト »Doctrine のリポジトリクラスをテストする方法

ご注意

Symfony2日本語翻訳ドキュメントは内容が古くなっております。公式サイトの英語ドキュメントを参照してください。

Doctrine のリポジトリクラスをテストする方法

Note

  • 対象バージョン:2.0以降
  • 翻訳更新日:2013/6/14

Symfony プロジェクトで Doctrine のリポジトリクラスに対してユニットテストを記述することは推奨ではありません。リポジトリを操作する場合、通常は実際のデータベース接続に対してテストされることを意図しているからです。 リポジトリクラスのメソッドに何らかの特殊なロジックが実装されている場合は、その部分のみユニットテストの対象とします。

このページでは、実際のデータベースへのクエリーをテストする方法を解説しています。

ファンクショナルテスト

実際にクエリーを実行した結果をテストする必要がある場合は、Symfony のカーネルを boot して実際のデータベース接続を取得します。 テストクラスで WebTestCase を継承します。 WebTestCase を使うと、テストコード内で Symfony のカーネルの boot などを簡単に行えます。

// 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();
    }
}
blog comments powered by Disqus