【问题标题】:Doctrine and ZF2 - Unit Testing to ignore flush() and non-persisted mocked objectsDoctrine and ZF2 - 忽略 flush() 和非持久模拟对象的单元测试
【发布时间】:2013-10-28 09:37:29
【问题描述】:

尝试对我的服务模型进行单元测试,这些模型充斥着我处理过的实体的 Doctrine 刷新命令。我收到错误消息,表明我的新模拟对象没有持久化,并且关系没有新实体的级联选项。

看到这一点后,我意识到我也不希望我的 flush() 操作进入数据库,因为它们只是对新实体的单元测试。

如何让 Doctrine 忽略模拟对象并忽略刷新操作?

现在我收到此错误:Fatal error: Command failed: PHP Fatal error: Call to a member function bindValue() on a non-object in /Users/person/Sites/project/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php on line 1311 with:

    // Nullify EM
    $sm->setAllowOverride(true);
    $sm->setFactory('Doctrine\ORM\EntityManager', function ($sm) {

        $eventManager = null;
        $metadataCache = new \Doctrine\Common\Cache\ArrayCache;
        $paths = $sm->get('Config')['doctrine']['driver']['application_entities']['paths'];

        $config = new \Doctrine\ORM\Configuration();
        $config->setMetadataCacheImpl($metadataCache);
        $config->setMetadataDriverImpl($config->newDefaultAnnotationDriver($paths, false));
        $config->setQueryCacheImpl(new \Doctrine\Common\Cache\ArrayCache);
        $config->setProxyDir(__DIR__ . '/Proxies');
        $config->setProxyNamespace('Doctrine\Tests\Proxies');

        $conn = array(
            'driverClass'  => 'Doctrine\Tests\Mocks\DriverMock',
            'wrapperClass' => 'Doctrine\Tests\Mocks\ConnectionMock',
            'user'         => 'john',
            'password'     => 'wayne'
        );

        $conn = \Doctrine\DBAL\DriverManager::getConnection($conn, $config, $eventManager);

        return \Doctrine\Tests\Mocks\EntityManagerMock::create($conn, $config, $eventManager);

});

我可以通过更改 Doctrine 的测试代码来解决上述问题,但这是不允许的。 我已经尝试创建一个 EntityManager 的 Mock 以使用模拟刷新存储在我的 ServiceManager 中,但是 EntityManager 是一个单例,因此无论如何都会返回一个新的实例。关于使用 Doctrine 的服务的单元测试的信息绝对为零,所以在这一点上,我只需要假设它实际上是不可能的。

【问题讨论】:

标签: php unit-testing doctrine-orm zend-framework2


【解决方案1】:

好的,经过几天的谷歌搜索。我终于收到了 Ocramius 关于如何实际测试 Doctrine 消费服务的回答:https://gist.github.com/Ocramius/3994325

【讨论】:

    猜你喜欢
    • 2015-04-16
    • 2019-10-27
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多