単体テストを実行するときは、テストデータベースを使用しています(したがって、本番データベースには触れません)。単体テストが終了した後、どうすればテストデータベースをクリーンアップできますか?
エンティティマネージャオブジェクトがあります。すべてのテーブルからすべての行を削除する方法はありますか?
単体テストを実行するときは、テストデータベースを使用しています(したがって、本番データベースには触れません)。単体テストが終了した後、どうすればテストデータベースをクリーンアップできますか?
エンティティマネージャオブジェクトがあります。すべてのテーブルからすべての行を削除する方法はありますか?
実はとても簡単でした。テストリスナーを作成しました。
<?php
class TestDbCleanupListener implements PHPUnit_Framework_TestListener
{
private $_em;
private function _getEntityManager()
{
if (null === $this->_em) {
$this->_em = Bootstrap::getServiceManager()->get('doctrine.entitymanager.orm_default');
}
return $this->_em;
}
/**
* called when test is started - starts transaction
* (non-PHPdoc)
* @see PHPUnit_Framework_TestListener::startTest()
*/
public function startTest(PHPUnit_Framework_Test $test)
{
$this->_getEntityManager()->beginTransaction();
}
/**
* called when test is ended - rolls back the transaction
* @param PHUnit_Framework_Test $test
* @param float $length the length of time for the test
*/
public function endTest(PHPUnit_Framework_Test $test, $length)
{
$this->_getEntityManager()->rollback();
}
/**
* Required for Interface
* (non-PHPdoc)
* @see PHPUnit_Framework_TestListener::addError()
*/
public function addError(PHPUnit_Framework_Test $test, Exception $e, $time)
{
}
/**
* Required for Interface
* (non-PHPdoc)
* @see PHPUnit_Framework_TestListener::addFailure()
*/
public function addFailure(PHPUnit_Framework_Test $test, PHPUnit_Framework_AssertionFailedError $e, $time)
{
}
/**
* Required for Interface
* (non-PHPdoc)
* @see PHPUnit_Framework_TestListener::addError()
*/
public function addIncompleteTest(PHPUnit_Framework_Test $test, Exception $e, $time)
{
}
/**
* Required for Interface
* (non-PHPdoc)
* @see PHPUnit_Framework_TestListener::addSkippedTest()
*/
public function addSkippedTest(PHPUnit_Framework_Test $test, Exception $e, $time)
{
}
/**
* Required for Interface
* (non-PHPdoc)
* @see PHPUnit_Framework_TestListener::startTestSuite()
*/
public function startTestSuite(PHPUnit_Framework_TestSuite $suite)
{
}
/**
* Required for Interface
* (non-PHPdoc)
* @see PHPUnit_Framework_TestListener::endTestSuite()
*/
public function endTestSuite(PHPUnit_Framework_TestSuite $suite)
{
}
}