2010-12-17 10 views
7

¿Cómo puedo hacerlo desde PHP, volver a crear mi base de datos, tal vez la inserción de datos predeterminados. Actualmente, tengo la intención de usar el comportamiento para Pruebas Unitarias.¿Cómo puedo en PHP volver a crear mi base de datos (para pruebas de unidades, por ejemplo)

estoy usando Doctrina 2, Zend Framework 1.11, Zend_Test para pruebas unitarias

que podría utilizar la CLI

doctrine orm:schema-tool:update --force 

O

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

Busco a un reemplazo de PHP, hasta ahora encontrado this

pero se verá som ething 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); 

Y realmente no quiero tener que especificar las clases de modelo, esp en el desarrollo cuando pueden cambiar. Solo debe leer todas las clases especificadas en ... a continuación ... al igual que con la CLI, ¿no necesita especificar las clases que desea?

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

* (referencia) * [Capítulo en PHPUnit en las pruebas de la base de datos] (http://www.phpunit.de/manual/3.4/en/database.html) – Gordon

+0

@Gordon, gracias, creo que esa será la manera correcta de unirse probar mis modelos, lo único que hay es una conexión PDO, ¿cómo puedo usar la conexión de Doctrine? Estoy usando [Doctrine 2] (http: //www.doctrine-project.org /) –

+0

Básicamente estoy usando la misma configuración que usted, excepto que saco la lista de nombres de clases de una configuración, que es más fácil de mantener. Sin embargo, descubrí que llamar 'dropSchema()' y 'createSchema()' en cada prueba es * realmente * costoso, y un gran conjunto de pruebas tarda una eternidad en ejecutarse. El uso de accesorios PHPUnit es mucho más rápido. También tendré que verificar la extensión de Benjamin. –

Respuesta

5

Puede utilizar

La extensión de PHPUnit para la Doctrina ofrece varios ganchos en la extensión de base de datos PHPUnits y ofrece una forma muy conveniente para probar el código Doctrina 2 contra una base de datos.

Hay algunos ejemplos en el archivo Léame, incluido un ejemplo que muestra cómo crear el esquema de la base de datos sobre la marcha. Benjamin Eberlei's es un colaborador principal de Doctrine 2.

Véase también guía definitiva de B. Eberlei a Prueba de DB con PHPUnit

0

Doctrine admite fixtures. Pruébalo.

+0

Estoy usando Doctrine 2. Tal vez debería haber dejado más claro –

+0

aquí hay un tutorial para Symfony: http://www.symfony-project.org/blog/2009/10/05/symfony-and-doctrine-2 Usted tiene que hacer sus propios modelos manualmente y persistirlos. – erenon

1

Debido a que ha configurado la ruta de los modelos al configurar el EntityManager puede crear el esquema de código sin tener que redeclarar este camino (y sin tener que declarar cada clase). Para hacer esto, necesita obtener una referencia a su instancia configurada de EntityManager y obtener una referencia a ClassMetadataFactory desde la cual puede llamar a ClassMetadataFactory # getAllMedata().

Aquí se muestra un ejemplo en el que tengo una clase Bootstrap estática que me permite obtener una referencia a la EntityManager desde cualquier lugar y vuelva a crear el esquema en el establecimiento de la llamada() en las pruebas de unidad:

class ModelTestCase extends PHPUnit_Framework_TestCase { 

    public function setUp() { 
     $em = Bootstrap::getEntityManager(); 
     $tool = new \Doctrine\ORM\Tools\SchemaTool($em); 

     $mdFactory = $em->getMetadataFactory(); 
     $tool->createSchema($mdFactory->getAllMetadata()); 
     parent::setUp(); 
    } 
} 
Cuestiones relacionadas