使用PHPUnit对Doctrine对象进行单元测试
题
我开始尝试使用PHPUnit测试我的Doctrine对象,并希望每次都重新从模型对象重新加载数据库。
我的第一次尝试看起来像这样:
class Tests_User extends PHPUnit_Framework_TestCase
{
public function setUp()
{
Doctrine_Manager::connection('mysql://user:pass@localhost/testdb');
Doctrine::createDatabases();
Doctrine::createTablesFromModels('../../application/models');
}
public function testSavingWorks()
{
$user = new User();
$user->save();
}
public function testSavingWorksAgain()
{
$user = new User();
$user->save();
}
public function tearDown()
{
Doctrine::dropDatabases();
}
}
问题是当第二次测试再次调用setUp()时,createTablesFromModels()失败,因此我收到错误,因为没有表存在。
我真的很感激其他人如何为PHPUnit重新初始化Doctrine连接或其他单元测试目的。
解决方案
因此,事实证明createTablesFromModels包含文件,然后比较之前和之后定义的类的列表,这就是为什么它不能工作两次。
以下序列在重复时起作用:
Doctrine::loadModels($path);
Doctrine::createTablesFromArray(Doctrine::getLoadedModels());
其他提示
查看Ocramius的这个Gist,它显示您可以使用数据夹具进行测试: https:// gist .github.com / Ocramius / 3994325
不隶属于 StackOverflow