我试图模拟一个Doctrine存储库和entityManager,但PHPUnit一直告诉我:
1)CommonUserTest :: testGetUserById尝试配置方法" findBy" 由于它不存在而无法配置,但尚未配置 指定的,是最终的,或者是静态的
以下是片段:
<?php
use \Domain\User as User;
use PHPUnit\Framework\TestCase;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\EntityManager;
class CommonUserTest extends PHPUnit_Framework_TestCase
{
public function testGetUserById()
{
// mock the repository so it returns the mock of the user (just a random string)
$repositoryMock = $this
->getMockBuilder(EntityRepository::class)
->disableOriginalConstructor()
->getMock();
$repositoryMock->expects($this->any())
->method('findBy')
->willReturn('asdasd');
// mock the EntityManager to return the mock of the repository
$entityManager = $this
->getMockBuilder(EntityManager::class)
->disableOriginalConstructor()
->getMock();
$entityManager->expects($this->any())
->method('getRepository')
->willReturn($repositoryMock);
// test the user method
$userRequest = new User($entityManager);
$this->assertEquals('asdasd', $userRequest->getUserById(1));
}
}
有任何帮助吗?我尝试了一些此代码的变体,但无法通过此特定错误。
感谢。
答案 0 :(得分:4)
您使用的是哪个版本的PHPUnit?
无论如何,请检查这个可能的解决方案:
$repositoryMock = $this
->getMockBuilder(EntityRepository::class)
->setMethods(['findBy'])
->disableOriginalConstructor()
->getMock();
应该工作。