【发布时间】:2015-05-21 19:05:36
【问题描述】:
我在 Mock 上苦苦挣扎。我尝试在我的网站(Symfony2)上做一些测试。 这是我的错误:
There was 1 failure:
1) L3L2\EntraideBundle\Tests\Controller\InboxControllerTest::testGetNbTotalMessagePasDejaVu
Expectation failed for method name is equal to <string:getNbTotalMessagePasDejaVu> when invoked 1 time(s).
Method was expected to be called 1 times, actually called 0 times.
我在互联网上看到了几个带有 $entityManager 参数的示例,就像类的属性一样(但我没有时间再更改它了)。我希望这不是问题的根源...... 这是我的代码:
收件箱控制器:
public function getNbTotalMessagePasDejaVu(ObjectManager $entityManager = null)
{
if($entityManager == null)
$entityManager = $this->getDoctrine()->getEntityManager();
$repository = $entityManager->getRepository('L3L2EntraideBundle:Message');
$nbMessagePasDejaVu = $repository->getNbTotalMessagePasDejaVu(1); //change 1 to $this->getUser()->getId()
return $nbMessagePasDejaVu;
}
InboxControllerTest:
class InboxControllerTest extends \PHPUnit_Framework_TestCase
{
public function testGetNbTotalMessagePasDejaVu()
{
$msgRepository = $this
->getMockBuilder("\Doctrine\ORM\EntityRepository")
->disableOriginalConstructor()
->getMock();
$msgRepository->expects($this->once())
->method('getNbTotalMessagePasDejaVu')
->will($this->returnValue(0));
$entityManager = $this->getMockBuilder('\Doctrine\Common\Persistence\ObjectManager')
->disableOriginalConstructor()
->getMock();
$entityManager->expects($this->once())
->method('getRepository')
->will($this->returnValue($msgRepository));
$msg = new InboxController();
$this->assertEquals(0, $msg->getNbTotalMessagePasDejaVu($entityManager));
}
}
有人有想法吗?谢谢!
【问题讨论】:
-
你的单元测试中有合适的使用语句吗?如果 InboxController 与您预期的不同,则可能会导致这样的症状。