访问phpunittest中的实体管理器

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了访问phpunittest中的实体管理器脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我在symfony中有以下单元测试代码

<?PHP

// src/Acme/DemoBundle/tests/UtilITy/CalculatorTest.PHP
namespace ShopIoUs\MainBundle\Tests;

class ShippingCostTest extends \PHPUnit_Framework_TestCase
{
    public function testShippingCost()
    {
        $em = $this->kernel->getContainer()->get('doctrine.orm.entity_manager');
        $query = $em->createQueryBuilder();
        $query->select('c')
              ->From("ShopIoUSUSErBundle:City",'c');
        $result =  $query->getQuery()->getResult();
        var_dump($result);
    }
}

我试图在这里访问实体管理器,它总是给我这个错误

Undefined PRoPErty: Acme\MainBundle\Tests\ShippingCostTest::$kernel

解决方法

要实现这一点,您需要创建一个基本测试类(让我们称之为KernelAwareTest),其中包含以下内容

<?PHP

namespace ShopIoUs\MainBundle\Tests;

require_once dirname(__DIR__).'/../../../app/AppKernel.PHP';

/**
 * Test case class helpful with Entity tests requiring the database interaction.
 * For regular entity tests it's better to extend standard \PHPUnit_Framework_TestCase instead.
 */
abstract class KernelAwareTest extends \PHPUnit_Framework_TestCase
{
    /**
     * @VAR \Symfony\component\HttpKernel\Kernel
     */
    protected $kernel;

    /**
     * @var \Doctrine\ORM\EntityManager
     */
    protected $entityManager;

    /**
     * @var \Symfony\Component\DependencyInjection\Container
     */
    protected $container;

    /**
     * @return null
     */
    public function SETUP()
    {
        $this->kernel = new \AppKernel('test',true);
        $this->kernel->boot();

        $this->container = $this->kernel->getContainer();
        $this->entityManager = $this->container->get('doctrine')->getManager();

        $this->generateSchema();

        parent::setUp();
    }

    /**
     * @return null
     */
    public function tearDown()
    {
        $this->kernel->shutdown();

        parent::tearDown();
    }

    /**
     * @return null
     */
    protected function generateSchema()
    {
        $Metadatas = $this->getMetadatas();

        if (!empty($Metadatas)) {
            $tool = new \Doctrine\ORM\Tools\SchemaTool($this->entityManager);
            $tool->dropSchema($Metadatas);
            $tool->createSchema($Metadatas);
        }
    }

    /**
     * @return array
     */
    protected function getMetadatas()
    {
        return $this->entityManager->getMetadataFactory()->getAllMetadata();
    }
}

那么你自己的测试类将从这个扩展:

<?PHP

namespace ShopIoUs\MainBundle\Tests;
use ShopIoUs\MainBundle\Tests\KernelAwareTest;

class ShippingCostTest extends KernelAwareTest
{ 
    public function setUp()
    {
        parent::setUp();

        // Your own setUp() goes here
    }

    // Tests themselves
}

然后使用父类方法.在您的情况下,要访问实体管理器,请执行:

$entityManager = $this->entityManager;

脚本宝典总结

以上是脚本宝典为你收集整理的访问phpunittest中的实体管理器全部内容,希望文章能够帮你解决访问phpunittest中的实体管理器所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。