Doctrine2:使用YAML配置测试存储库类

时间:2011-12-18 17:43:45

标签: testing symfony doctrine-orm

我使用Doctrine2为我的symfony2项目配置了YAML配置。我不明白如何使cookbook entry适应YAML设置。

我的学说映射位于/path/to/my/bundle/Resources/config/doctrine/IpRange.orm.yml

运行PHPUnit时,出现错误:

Doctrine \ ORM \ Mapping \ MappingException:没有为'Yitznewton \ FreermsBundle \ Entity \ IpRange'找到名为'Yitznewton.FreermsBundle.Entity.IpRange.orm.yml'的映射文件。

听起来我需要配置测试装备以使用symfony文件命名约定,但我不知道该怎么做。

使用symfony-standard.git签出v2.0.7

这是我的测试:

<?php

namespace Yitznewton\FreermsBundle\Tests\Utility;

use Doctrine\Tests\OrmTestCase;
use Doctrine\ORM\Mapping\Driver\DriverChain;
use Doctrine\ORM\Mapping\Driver\YamlDriver;
use Yitznewton\FreermsBundle\Entity\IpRange;
use Yitznewton\FreermsBundle\Entity\IpRangeRepository;

class IpRangeRepositoryTest extends OrmTestCase
{
    private $_em;

    protected function setup()
    {
        // FIXME: make this path relative
        $metadataDriver = new YamlDriver('/var/www/symfony_2/src/Yitznewton/FreermsBundle/Resources/config/doctrine');
        $metadataDriver->setFileExtension('.orm.yml');

        $this->_em = $this->_getTestEntityManager();
        $this->_em->getConfiguration()
            ->setMetadataDriverImpl($metadataDriver);

        $this->_em->getConfiguration()->setEntityNamespaces(array(
            'FreermsBundle' => 'Yitznewton\\FreermsBundle\\Entity'));
    }

    protected function getRepository()
    {
        return $this->_em->getRepository('FreermsBundle:IpRange');
    }

    public function testFindIntersecting_RangeWithin_ReturnsIpRange()
    {
        $ipRange = new IpRange();
        $ipRange->setStartIp('192.150.1.1');
        $ipRange->setEndIp('192.160.1.1');

        $this->assertEquals(1, count($this->getRepository()
            ->findIntersecting($ipRange)),
            'some message');
    }

1 个答案:

答案 0 :(得分:0)

再看一下symfony文档,似乎使用实时测试数据库进行集成测试比使用存储库类的单元测试更受欢迎。也就是说,不支持对EntityManagers进行存根。