Symfony - 删除并重新加载每个测试的所有数据库记录

Posted

技术标签:

【中文标题】Symfony - 删除并重新加载每个测试的所有数据库记录【英文标题】:Symfony - Delete and reload all database records for each test 【发布时间】:2010-03-19 11:48:24 【问题描述】:

从 Symfony 网站提供的Jobeet tutorial 中,我发现每次使用此脚本运行单元测试时,我都可以加载fixtures 数据:

Doctrine_Core::loadData(sfConfig::get('sf_test_dir').'/fixtures');

但是,我想在每次运行单元测试时删除重新加载数据库中的所有记录。目前,我正在手动执行此操作(在每次测试之前运行 symfony 学说:build --all)。有人可以为我提供正确的方法吗?

【问题讨论】:

这是与这个很好的答案线程的副本:***.com/a/7119887/187273 【参考方案1】:

我最后在我的 test/bootstrap/unit.php 文件中使用了以下内容:

$doctrine = new sfDoctrineDropDbTask($configuration->getEventDispatcher(), new sfAnsiColorFormatter());
$doctrine->run(array(), array("--no-confirmation","--env=test"));

$doctrine = new sfDoctrineBuildDbTask($configuration->getEventDispatcher(), new sfAnsiColorFormatter());
$doctrine->run(array(), array("--env=test"));

$doctrine = new sfDoctrineInsertSqlTask($configuration->getEventDispatcher(), new sfAnsiColorFormatter());
$doctrine->run(array(), array("--env=test"));

在加载固定装置之前。这对我来说效果很好,尽管如果您有一个大型架构和大量固定装置,它可能会变慢。 the Web Mozarts blog 上有一些关于编写高效测试的技巧,还有关于使用 sqlite 内存数据库来加快速度的技巧。

【讨论】:

【参考方案2】:

如果您只想清除表格,您可以通过将空数组添加到您的固定装置,然后使用Doctrine_Core::loadData(sfConfig::get('sf_test_dir').'/fixtures');

#Tables to emtpy    
User: []
Post: []

#Tables to load fixtures
Country:
  country1:
    name: United Kingdom
  country2:
    name: USA

【讨论】:

请注意,这不会重置 ID 计数,因此如果您需要这样做,则需要使用 Richsage 的方法。 比删除、创建、填充整个数据库要快得多。谢谢!

以上是关于Symfony - 删除并重新加载每个测试的所有数据库记录的主要内容,如果未能解决你的问题,请参考以下文章

全局捕获所有可能的android异常并重新加载应用程序

UITableView 删除并重新加载单元格

记住我功能在 Symfony2 中不起作用

加载重新加载页面时如何删除数组中的所有对象?

尝试使用 reloadsections 重新加载时,节中的行数无效

Hashmap加载因子 - 基于占用的桶数或所有桶中的条目数?