Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php symfony的单元测试问题_Php_Unit Testing_Symfony_Doctrine - Fatal编程技术网

Php symfony的单元测试问题

Php symfony的单元测试问题,php,unit-testing,symfony,doctrine,Php,Unit Testing,Symfony,Doctrine,) 由于两天来我对查询进行了单元测试,我遇到了一些问题,下面是代码和测试: 请求: <?php namespace CampaignBundle\Service; use Doctrine\ORM\EntityManager; use AccessBundle\Model\UserInterface; use AccessBundle\Service\CountryFilter; class CampaignProvider { /** @var EntityManager

)

由于两天来我对查询进行了单元测试,我遇到了一些问题,下面是代码和测试:

请求:

<?php

namespace CampaignBundle\Service;

use Doctrine\ORM\EntityManager;
use AccessBundle\Model\UserInterface;
use AccessBundle\Service\CountryFilter;

class CampaignProvider
{
    /** @var EntityManager */
    protected $em;

    /** @var CountryFilter */
    protected $countryFiler;

    /**
     * CampaignProvider constructor.
     * @param EntityManager $entityManager
     * @param CountryFilter $countryFilter
     */
    public function __construct(EntityManager $entityManager, CountryFilter $countryFilter)
    {
        $this->em = $entityManager;
        $this->countryFiler = $countryFilter;
    }

    /**
     * @return \Doctrine\ORM\EntityRepository|CampaignBundle\Entity\CampaignRepository
     */
    protected function getRepository()
    {
        return $this->em->getRepository('CampaignBundle:Campaign');
    }

    /**
     * @return array
     * @throws \Exception
     */
    public function getCampaign()
    {
        $queryBuilder = $this->getCampaignQb();

        return $queryBuilder->getQuery()->getResult();
    }

    /**
     * @return \Doctrine\ORM\QueryBuilder
     * @throws \Exception
     */
    public function getCampaignQb()
    {
        $repository = $this->getRepository();

        $queryBuilder = $repository->createQueryBuilder('c');

        $queryBuilder
            ->where('c.isDeleted = 0')
            ->addOrderBy('c.id', 'DESC');

        return $queryBuilder;
    }
}
我承认我在测试查询时遇到了一些问题,你能帮我吗

谢谢;)

编辑: 编辑我的全部帖子


ps:CountryFilter是我在活动提供程序中调用的一项服务

您在模拟实体管理器,但在测试中没有将其传递给活动提供程序:
$this->活动提供程序
不知道本地
$entityManager
变量


如果使用构造函数注入,则需要将其放在构造函数调用中;如果使用方法注入,则需要将其放在
setEntityManager
方法中。

您是否在entity one中声明了repository类?您好,是的,我这样做了(我编辑了我的帖子以显示如何获取存储库),请您跳过整个类!不仅仅是方法。谢谢我再次编辑了sorryhello,通常我是在测试类的设置中编辑的,我编辑了我的帖子现在你可以在测试中看到它,你仍然在使用局部变量(
$repository
$entityManager
),但是你应该使用你在
设置
函数中创建的变量(
$this->repository
$this->entityManager
)。您不必为它们创建新的模拟。
<?php
/**
 * Created by PhpStorm.
 * User: mickael
 * Date: 24/12/18
 * Time: 14:10
 */

namespace CampaignBundle\Tests\Service;

use Doctrine\ORM\AbstractQuery;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\EntityRepository;
use AccessBundle\Service\CountryFilter;
use CampaignBundle\Entity\Campaign;
use CampaignBundle\Service\CampaignProvider;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;

class CampaignProviderTest extends KernelTestCase
{
    /** @var EntityManager */
    private $entityManager;

    /** @var CampaignProvider */
    private $campaignProvider;

    /** @var CountryFilter */
    private $countryFilter;

    /** @var TokenStorageInterface */
    private $tokenStorage;

    /** @var AuthorizationCheckerInterface */
    private $authorizationChecker;

    public function setUp()
    {
        $this->entityManager = $this->getMockBuilder('\Doctrine\ORM\EntityManager')
            ->disableOriginalConstructor()
            ->getMock();

        $this->tokenStorage = $this->getMockBuilder('Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface')
            ->disableOriginalConstructor()
            ->getMock();

        $this->authorizationChecker = $this->getMockBuilder('Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface')
            ->disableOriginalConstructor()
            ->getMock();

        $this->countryFilter = new CountryFilter($this->tokenStorage, $this->authorizationChecker, $this->entityManager);

        $this->campaignProvider = new CampaignProvider($this->entityManager, $this->countryFilter);
    }

    public function testGetCampaign()
    {
        $queryBuilder = $this->getMockBuilder('Doctrine\ORM\QueryBuilder')
            ->setMethods(array('getQuery', 'getCampaignQb'))
            ->disableOriginalConstructor()
            ->getMock();

        $queryBuilder->expects($this->once())
            ->method('getCampaignQb')
            ->will($this->returnValue($queryBuilder));

        $queryBuilder->expects($this->once())
            ->method('getQuery')
            ->will($this->returnValue($queryBuilder));

        $queryBuilder->expects($this->once())
            ->method('getResult')
            ->will($this->returnValue($queryBuilder));

        $this->campaignProvider->getCampaign();
    }

    public function testGetCampaignQb()
    {
        $repository = $this->getMockBuilder('\Doctrine\ORM\EntityRepository')
            ->disableOriginalConstructor()
            ->setMethods(array('createQueryBuilder'))
            ->getMock();

        $queryBuilder = $this->getMockBuilder('Doctrine\ORM\QueryBuilder')
            ->setMethods(array('where', 'addOrderBy', 'createQueryBuilder'))
            ->disableOriginalConstructor()
            ->getMock();

        $repository->expects($this->once())
            ->method('createQueryBuilder')
            ->will($this->returnValue($queryBuilder));

        $queryBuilder->expects($this->once())
            ->method('where')
            ->will($this->returnValue($queryBuilder));

        $queryBuilder->expects($this->once())
            ->method('addOrderBy')
            ->will($this->returnValue($queryBuilder));

        $entityManager = $this->getMockBuilder('\Doctrine\ORM\EntityManager')
            ->disableOriginalConstructor()
            ->getMock();

        $entityManager->expects($this->once())
            ->method('getRepository')
            ->will($this->returnValue($repository));

        $this->campaignProvider->getCampaignQb();
    }
}
PHP Fatal error:  Call to a member function createQueryBuilder() on null in