这是我想在管理器(族谱Manager.php)上测试的函数,当我运行phpunit命令时,它会产生以下错误:
在第77行的/home/majri/Documents/projects/IadDirectoryApp/vendor/iad-holding/genealogy-bundle/Iad/Bundle/GenealogyBundle/Manager/GenealogyManager.php中调用null上的成员函数getSingleScalarResult()
/**
* @param Genealogy $genealogy
* @return mixed
*/
public function getCountManagerialLevelsByGenealogy(Genealogy $genealogy)
{
$qb = $this->getRepository()->createQueryBuilder('gen');
$qb->select('count(distinct(gen.level))')
->where($qb->expr()->lt('gen.right', $genealogy->getRight()))
->andWhere($qb->expr()->gt('gen.left', $genealogy->getLeft()))
;
return $qb->getQuery()->getSingleScalarResult();
}**我的单元测试功能**
public function testGetCountManagerialLevelsByGenealogy()
{
$em = $this->getMockBuilder(EntityManager::class)
->disableOriginalConstructor()
->getMock();
$repository = $this->getMockBuilder(EntityRepository::class)
->disableOriginalConstructor()
->getMock();
$em->expects($this->once())
->method('getRepository')
->with('IadGenealogyBundle:Genealogy')
->will($this->returnValue($repository));
$queryBuilder = $this->getMockBuilder(QueryBuilder::class)
->setMethods(['select','where','setParameter','getQuery'])
->disableOriginalConstructor()
->getMock();
$repository->expects($this->once())
->method('createQueryBuilder')
->with('gen')
->will($this->returnValue($queryBuilder));
$queryBuilder->expects($this->at(0))
->method('select')
->will($this->returnValue($queryBuilder));
$queryBuilder->expects($this->at(1))
->method('where')
->will($this->returnValue($queryBuilder));
$queryBuilder->expects($this->at(2))
->method('setParameter')
->will($this->returnValue($queryBuilder));
$getQuery = $this->getMockBuilder('\Doctrine\ORM\AbstractQuery')
->setMethods(array('setParameter', 'getSingleScalarResult'))
->disableOriginalConstructor()
->getMockForAbstractClass();
$getQuery->expects($this->once())
->method('setParameter')
->will($this->returnValue($queryBuilder));
$getQuery->expects($this->any())
->method('getSingleScalarResult')
->will($this->returnValue(3));
$queryBuilder->expects($this->at(3))
->method('getQuery')
->will($this->returnValue($getQuery));
$genealogyManager = new GenealogyManager($em);
$this->assertEquals(3, $genealogyManager->getCountManagerialLevelsByGenealogy($this->buildMockGenealogy(9)));
}发布于 2017-02-01 07:09:07
我不确定这是否是唯一的错误,但是您的查询需要正确地设置参数,如下所示:
$qb->select('count(distinct(gen.level))')
->where($qb->expr()->lt('gen.right', ':getRight'))
->andWhere($qb->expr()->gt('gen.left', ':getLeft'))
->setParameters(array(
'genRight' => $genealogy->getRight(),
'genLeft' => $genealogy->getLeft()
))
; 发布于 2019-01-16 17:46:26
在我看来,您似乎忘记了模拟andWhere方法(因此返回null)。
https://stackoverflow.com/questions/41966502
复制相似问题