【问题标题】:Mocking findOneBy"field" in doctrine2 with PHPUnit使用 PHPUnit 在学说 2 中模拟 findOneBy"field"
【发布时间】:2015-05-10 21:33:48
【问题描述】:

如果我模拟存储库方法find 我会得到预期的结果, 但如果我打电话给findByfindOneByfindOneById,我总是会得到null

代码示例:

$mock->expects($this->once())
                ->method('getId')
                ->will($this->returnValue(1));
$mockRepository->expects($this->any())
                         ->method('findBy') //if here I use 'find' works for all other cases always null
                         ->will($this->returnValue($mock));

发生这种情况有什么原因吗? 是否可以像 findByIdfindOneById 这样模拟 Doctrine2 的“魔术”方法? 如果是,我的方法有什么问题?

【问题讨论】:

  • 我猜你必须模拟 __call 方法
  • __call 拨打电话至findByfindOneBy
  • 由于使用的是mock,除非使用部分mock,否则__call方法(或mocked对象的任何其他方法)不会调用原始方法,而是默认返回null
  • @Matteo,完全没有,我只是暂停了测试套件一段时间,因为我必须处理更高优先级的其他事情。
  • 好的,如果我能帮助你解决这个问题,请告诉我:)

标签: php unit-testing doctrine-orm mocking phpunit


【解决方案1】:

如评论中所述,可以模拟魔术方法调用。例如:

 // Mocked return value
 $mock->expects($this->once())
            ->method('getId')
            ->will($this->returnValue(1));

 // Example of repo mocking
 // $mockRepository= $this->getMock('Doctrine\ORM\EntityRepository', array(), array(), '', false);

$this->mockRepository
->expects($this->at(1))
->method('__call')
->with('findBy')
->will($this->returnValue($mock));

希望有帮助

【讨论】:

    猜你喜欢
    • 2015-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多