我使用预言编写单元测试
"require": {
...,
"phpspec/prophecy-phpunit": "~1.0"
},
我打电话给
$dbUser = $this
->em
->getRepository('MainBundle:User')
->findOneById($id);
测试时我得到一个错误,因为没有定义方法findOneByProperty。除了将原始代码更改为:
$dbUser = $this
->em
->getRepository('MainBundle:User')
->findOneBy(array('id' => $id);
我没有找到任何其他解决方法。 有什么方法可以使用预言并保留原始代码来测试它吗?
答案 0 :(得分:1)
如果通过“原始代码”表示客户端代码,则可以通过创建自定义实体存储库来解决此问题。
class UserRepository extends EntityRepository
{
public function findOneById(int $id)
{
return parent::findOneById($id);
}
}
供参考http://symfony.com/doc/current/doctrine/repository.html
在你的测试中
$userRepository = $this->prophesize(UserRepository::class);
$em = $this->prophesize(EntityManagerInterface::class);
$em->getRepository('MainBundle:User')->willReturn($userRepository->reveal());
答案 1 :(得分:-1)
您可以在使用主键搜索时使用find()。所以,你的代码可以这么简单:
$dbUser = $this
->em
->getRepository('MainBundle:User')
->find($id);
See here了解更多信息。