1

本番サーバーでコードを更新するたびに、テスト データベースに行を挿入して phpunit テストを実行します。テスト データベースには本番データベースの内容が反映されていないため、本番データベースでテストを実行したいと考えています。テストが完了したら、テスト中に作成されたすべての行を削除したいと思います。これを達成するための最良の方法は何ですか? 完全に問題がなく、本番データを変更するリスクがない方法は考えられません。

4

2 に答える 2

0

テストには sqlite (デフォルト) を使用することをお勧めします。これははるかに高速であり、本番データベースで何かを台無しにするかどうかを心配する必要がないためです。私がしたことは、

EntityTest.php extends TestsHelper.php extends PHPUnit_Framework_TestCase

setup() では、データベースとフィクスチャを作成します。

インターネットからコードを取得しましたが、動作します。役に立つかもしれません。

 // class TestsHelper

 /**
 * @var Symfony\Component\DependencyInjection\Container
 */
protected $container;

public function setUp()
{
    // Boot the AppKernel in the test environment and with the debug.
    $this->kernel = new \AppKernel('test', true);
    $this->kernel->boot();

    // Store the container and the entity manager in test case properties
    $this->container = $this->kernel->getContainer();
    $this->em = $this->container->get('doctrine')->getEntityManager();

    // Build the schema for sqlite
    $this->generateSchema();

    $this->generateFixtures() ;

    parent::setUp();
}

public function tearDown()
{
    // Shutdown the kernel.
    $this->kernel->shutdown();

    parent::tearDown();
}

protected function generateSchema()
{
    // Get the metadatas of the application to create the schema.
    $metadatas = $this->getMetadatas();

    if ( ! empty($metadatas)) {
        // Create SchemaTool

        /**
        * @var \Doctrine\ORM\Tools\SchemaTool
        */
        $tool = new SchemaTool($this->em);
//            $tool->dropDatabase() ;
        $tool->createSchema($metadatas);
    } else {
        throw new Doctrine\DBAL\Schema\SchemaException('No Metadata Classes to process.');
    }
}
/**
 * Overwrite this method to get specific metadatas.
 *
 * @return Array
 */
protected function getMetadatas()
{
    return $this->em->getMetadataFactory()->getAllMetadata();
}

そして、generateFixtures() では、通常どおり作成します。

$entity = new MyEntity() ;
$this->em->persist($entity) ;
$this->em->flush() ;
于 2013-02-01T15:46:37.753 に答える