使用 PHPUnit 在 doctrine2 中模拟 findOneBy"field"
Mocking findOneBy"field" in doctrine2 with PHPUnit
如果我模拟存储库方法 find
我会得到预期的结果,
但是如果我调用 findBy
、findOneBy
、findOneById
我总是得到 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));
发生这种情况有原因吗?
是否可以像 findById
或 findOneById
那样模拟 Doctrine2 的 "magics" 方法?
如果是,我的方法有什么问题?
如评论中所述,可以通过模拟魔术方法调用来实现。例如:
// 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));
希望对您有所帮助
如果我模拟存储库方法 find
我会得到预期的结果,
但是如果我调用 findBy
、findOneBy
、findOneById
我总是得到 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));
发生这种情况有原因吗?
是否可以像 findById
或 findOneById
那样模拟 Doctrine2 的 "magics" 方法?
如果是,我的方法有什么问题?
如评论中所述,可以通过模拟魔术方法调用来实现。例如:
// 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));
希望对您有所帮助