スタンドアロンのバンドル/ライブラリでdoctrineを使用したデータベーステストの優れた方法を見つけるのは難しいです。
だから、私はあなたに私が使用する方法を提供します:
1)このため、特定のデータベース
を、あなたが使用したものとは異なるだろう、データベース構成、を含む特定の設定ファイルを作成することができますあなたのphpunit設定ではdefine environment variablesとするだけです。テストフェーズ中に一時データベースを作成するために
:
/**
* Create database.
*/
public static function createDatabase($path)
{
$config = [
'driver' => 'pdo_mysql,
'host' => 127.0.0.1,
'user' => 'forge',
'password' => 'forge',
];
$tmpConnection = \Doctrine\DBAL\DriverManager::getConnection($config);
// If the db exists, do nothing
if (in_array('db_name', $tmpConnection->getSchemaManager()->listDatabases())) {
return;
}
// Create the db
$tmpConnection->getSchemaManager()->createDatabase($GLOBALS['db_name']);
$tmpConnection->close();
}
2)特定のマッピングこのため
、次のことができます。
注あなたがそれらを生成する必要がある場合は、エンティティが存在していないながら、スキップなどのテストをマークする必要があります。
3)あなたは、データベース接続(一時的な)を再現し、あなたのテストの開始時に、あなたのスキーマを作成し、最後にそれをドロップする必要があり、特定のスキーマ
。
2つの最後の段階はliteのクラスで再開することができます
use Doctrine\DBAL\DriverManager;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\Tools\SchemaTool;
use Doctrine\ORM\Tools\Setup;
/**
* Database.
*/
class Db
{
/** @var EntityManager */
private $entityManager;
/**
* Create db schema.
*/
public function createSchema()
{
// Location(s) of your mapping
$mappingPaths = ['Acme/Path/To/Entities', 'Acme/Second/Path/To/Entities', ...];
// Db config, should be loaded from config files as previously said
$config = [
'dbname' => 'project_test'
'driver' => 'pdo_mysql',
'host' => 127.0.0.1,
'user' => 'forge',
'password' => 'forge',
];
// Configure and load your mapping
$metadataConfiguration = Setup::createAnnotationMetadataConfiguration($mappingPaths, true, null, null, false);
// Create the EntityManager instance
$em = EntityManager::create($config, $metadataConfiguration);
$tool = new SchemaTool($em);
$metadata = $em->getMetaDataFactory()->getAllMetaData();
// Drop an eventual existing schema
$tool->dropSchema($metadata);
// Create the new schema
$tool->createSchema($metadata);
$this->em = $em;
}
/**
* @return EntityManager
*/
public function getEntityManager()
{
return $this->em;
}
}
使用法:
public function setUp()
{
// Create the schema
$db = new Db();
$db->createSchema();
// Enjoy
$this->em = $db->getEntityManager();
}
・ホープこのヘルプます。