【发布时间】:2017-05-15 09:15:50
【问题描述】:
我尝试为自定义控制器创建测试。在这个中,这是执行的:
代码
$users = $this->getDoctrine()
->getRepository('MyBundle:User')
->findAllOrderedByName();
在测试控制器中,这就是我正在做的:
$entityManager = $this
->getMockBuilder('Doctrine\ORM\EntityManager')
->setMethods(['getRepository', 'clear'])
->disableOriginalConstructor()
->getMock();
$entityManager
->expects($this->once())
->method('getRepository')
->with('MyBundle:User')
->will($this->returnValue($userRepositoryMock));
// Set the client
$client = static::createClient();
$client->getContainer()->set('doctrine.orm.default_entity_manager', $entityManager);
问题
但最后测试失败了,因为我的模拟似乎没有被使用:
tests\MyBundle\Controller\ListingControllerTest::testAllAction 方法名称的期望失败等于字符串:getRepository 当被调用 1 次时。 方法预期调用1次,实际调用0次。
有什么想法吗?
编辑
以下关于 cmets 的评论,我创建了一个服务:
services:
my.user.repository:
class: MyBundle\Entity\UserRepository
factory: ['@doctrine.orm.default_entity_manager', getRepository]
arguments:
- MyBundle\Entity\User
所以现在,我“只是”必须模拟回购:
$userRepositoryMock = $this->getMockBuilder('MyBundle\Entity\UserRepository')
->disableOriginalConstructor()
->setMethods(['findAllOrderedByName'])
->getMock();
$userRepositoryMock
->expects($this->once())
->method('findAllOrderedByName')
->will($this->returnValue($arrayOfUsers));
并将其注入容器中:
$client->getContainer()->set('my.user.repository', $userRepositoryMock);
但我还是有同样的问题
【问题讨论】:
-
尝试用简单的
doctrine替换服务名称doctrine.orm.default_entity_manager -
我有同样的结果
标签: symfony phpunit symfony-2.8