繁体   English   中英

Symfony2 +功能测试“ DataFixtures加载如何设置正确的顺序”

[英]Symfony2 + Functional Testing “DataFixtures load how set the proper order”

我正在学习测试我的Symfony2代码,并且尝试按原样构建测试,因此我正在使用DataFixtures加载数据,并且我认为这也可以测试我的实体。 我将使用一个测试作为示例: CreateCompanyControllerTest.php ,这是我在每个测试中运行的基本代码:

private $em;

protected static $application;

public function setUp() {
    static::$kernel = static::createKernel();
    static::$kernel->boot();
    $this->em = static::$kernel->getContainer()->get('doctrine')->getManager();

    self::runCommand('doctrine:schema:update --force');

    $loader = new Loader();
    $loader->addFixture(new LoadCompanyData());

    $purger = new ORMPurger();
    $executor = new ORMExecutor($this->em, $purger);
    $executor->execute($loader->getFixtures());
}

protected static function runCommand($command) {
    $command = sprintf('%s --quiet', $command);

    return self::getApplication()->run(new StringInput($command));
}

protected static function getApplication() {
    if (null === self::$application) {
        $client = static::createClient();

        self::$application = new Application($client->getKernel());
        self::$application->setAutoExit(false);
    }

    return self::$application;
}

我不知道是否一直在运行命令doctrine:schema:update --force因为它可以清理数据库,这是我的第一个疑问。 现在关于LoadCompanyData.php同一问题,我有一些实体依赖项(请参见下面的代码:

 $mediaType = $manager->getRepository('MediaBundle:NMediaType')->find(1);
 $mediaStatus = $manager->getRepository('MediaBundle:NMediaStatus')->find(1);

但是由于我运行命令doctrine:schema:update --force清理了我的数据库,然后测试失败并显示以下消息:

1)传递给Wuelto \\ Common \\ MediaBundle \\ Entity \\ Media :: setType()的Company \\ RegisterCompanyBundle \\ Tests \\ Controller \\ CreateCompanyControllerTest :: testcreateCompanyAction参数1必须是Common \\ MediaBundle \\ Entity \\ NMediaType的实例,给定null,在/var/www/html/kraken/src/Company/RegisterCompanyBundle/DataFixtures/ORM/LoadCompanyData.php在第46行并已定义

没错,因为该表为空。 然后知道这一点:

  1. 有什么办法可以避免这种情况?
  2. 我应该为任何从属实体创建固定装置,然后在需要的地方调用吗? 在这种情况下,任何示例都可以,因为我不知道该怎么做。
  3. 我知道Data Fixtures中的getOrder()设置了夹具的加载顺序,但是,我如何使用它呢? 我的意思是,例如,在为公司加载数据之前,我应该首先添加从属实体的数据,对此有何建议?

始终清理测试数据库是一个好习惯,您的测试应该是自包含的,并且不要依赖以前测试中数据库中剩余的任何内容。

就是说,是的,您还应该设置固定装置或辅助函数,以在测试数据库中插入所需的任何必要数据。

您可以为每个测试文件执行一次此设置。 在时间上,数据库测试是昂贵的,因此,如果您可以摆脱对db的模拟调用,则应该这样做,但这完全取决于您要测试的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM