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