douba7784 2018-01-16 09:08
浏览 50
已采纳

单元测试Doctrine:不能模拟存储库方法

I'm trying to mock a Doctrine repository and the entityManager, but PHPUnit keeps telling me that:

1) CommonUserTest::testGetUserById Trying to configure method "findBy" which cannot be configured because it does not exist, has not been specified, is final, or is static

Here's the snippet:

<?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));
    }
}

Any help? I tried a few variations of this code but can't get passed this specific error.

Thanks.

  • 写回答

1条回答 默认 最新

  • dtj88302 2018-01-16 11:57
    关注

    Which version of PHPUnit are you using?

    anyway, check this possible solution:

    $repositoryMock = $this
                ->getMockBuilder(EntityRepository::class)
                ->setMethods(['findBy'])
                ->disableOriginalConstructor()
                ->getMock();
    

    Should work.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀