如何在PHP中重新创建数据库(例如单元测试)
如何从PHP中重新创建数据库,或者插入默认数据。目前,我打算将该行为用于单元测试 我正在使用条令2,Zend Framework 1.11,如何在PHP中重新创建数据库(例如单元测试),php,zend-framework,phpunit,doctrine-orm,zend-test,Php,Zend Framework,Phpunit,Doctrine Orm,Zend Test,如何从PHP中重新创建数据库,或者插入默认数据。目前,我打算将该行为用于单元测试 我正在使用条令2,Zend Framework 1.11,Zend_测试进行单元测试 我可以使用CLI doctrine orm:schema-tool:update --force 或 我正在寻找一个PHP的替代品,到目前为止发现 但它看起来像 $tool = new \Doctrine\ORM\Tools\SchemaTool($em); $classes = array( $em->getClas
Zend_测试
进行单元测试
我可以使用CLI
doctrine orm:schema-tool:update --force
或
我正在寻找一个PHP的替代品,到目前为止发现
但它看起来像
$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);
我真的不想指定模型类,尤其是在开发中,当它们可以更改时。它应该只是从中指定的所有类中读取。。。在下面与CLI一样,您不需要指定所需的类
$driverImpl = $config->newDefaultAnnotationDriver(array(realpath('../models')));
$config->setMetadataDriverImpl($driverImpl);
理论支持。试试看。你可以使用
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();
}
}
这里是symfony的一个教程:你必须手动创建自己的模型并将其持久化。(参考)@Gordon,谢谢你,我认为这将是对我的模型进行单元测试的正确方法,唯一的问题是不用PDO连接,我如何使用Doctrine的连接?我使用的设置与您基本相同,只是我从配置中提取类名列表,这样更易于维护。然而,我发现在每次测试中调用
dropSchema()
和createSchema()
非常昂贵,而且运行一大套测试需要花费很长时间。使用PHPUnit装置要快得多。我还必须检查Benjamin的扩展。@Bryan M.,但是fixture会处理数据库模式的更改吗?是的,也许我不会每次都更改数据库模式,但那只是以防万一。他们不会。我的模式经常更改,因此运行手动迁移不会太麻烦。我还将模式缓存到*.sql中,这样可以使重新创建模式的速度稍微加快。只是不要在每个测试上都运行模式重新生成,您应该会没事的。
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();
}
}