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