Search code examples
phpzend-frameworkphpunitdoctrine-ormzend-test

How can I in PHP re-create my Database (for Unit Testing for example)


How can I from PHP, re-create my Database, maybe inserting default data. Currently, I am intending to use the behavior for Unit Tests.

I am using Doctrine 2, Zend Framework 1.11, Zend_Test for unit tests

I could use the CLI

doctrine orm:schema-tool:update --force

Or

doctrine orm:schema-tool:drop --force
doctrine orm:schema-tool:create

I am looking for a PHP replacement, so far found this

but it will look something like

$tool = new \Doctrine\ORM\Tools\SchemaTool($em);
$classes = array(
  $em->getClassMetadata('Entities\User'),
  $em->getClassMetadata('Entities\Profile')
);
$tool->dropSchema($classes, \Doctrine\ORM\Tools\SchemaTool::DROP_DATABASE);
$tool->createSchema($classes);

And I don't really want having to specify the model classes, esp in development when they can change. It should just read from the all classes specified in ... below ... just like with the CLI, you don't need to specify the classes you want?

$driverImpl = $config->newDefaultAnnotationDriver(array(realpath('../models')));
$config->setMetadataDriverImpl($driverImpl);

Solution

  • You can use

    The PHPUnit Extension for Doctrine offers several hooks into PHPUnits Database extension and offers a very convenient way to test your Doctrine 2 code against a Database.

    There is some examples in the Readme, including an example that shows how to create the database schema on the fly. Benjamin Eberlei's is a Doctrine 2 core contributor.

    Also see B. Eberlei's Ultimate Guide to DB Testing with PHPUnit