我正在使用PHPUnit测试服务。
我正在使用setUp()
来创建我的服务接受的依赖项的模拟对象,如下所示:
public function setUp()
{
$this->fooManagerMock = $this->getFooManagerMock();
$this->barManagerMock = $this->getBarManagerMock();
$this->treeManagerMock = $this->getTreeManagerMock();
$this->loggerMock = $this->getLoggerMock();
$this->myService = new MyService($this->fooManagerMock, $this->barManagerMock, $this->treeManagerMock, $this->loggerMock);
}
捆绑\测试\服务\ MyTest的:: testServiceWithValidData
/**
* @dataProvider getServiceValidCaseData
*/
public function testServiceWithValidData($case)
{
$this->assertTrue($this->myService->serve($fooArray));
}
事实证明,在我serve()
函数中的实体经理,我有这样的事情:
return $this->fooManager->find($fooId) !== null;
在这种情况下,$ this-> fooManager是Mock_FooManager_4038382a
的实例,整个测试失败。
任何建议都非常受欢迎。
更新
/**
* @return \PHPUnit_Framework_MockObject_MockBuilder
*/
private function getFooManagerMock()
{
return $this->getMockBuilder(
'\MyBundle\Entity\Manager\FooManager'
)->disableOriginalConstructor()->getMock();
}
@matteo的示例
我希望$fooManager->find($id)
能够返回一个特定的Foo实例,例如:
\MyBundle\Manager\FooManager{
"id" : 234234,
"status" : "pending".
"color" : "yellow",
"tree" : [
"id" : 2345,
"height" :160
]
}
答案 0 :(得分:2)
您必须在测试用例中指定模拟实体必须执行的操作,尝试在调用测试服务之前在testServiceWithValidData
方法中添加此代码:
$fooMockObj = $this->getMock('\MyBundle\Entity\Foo');
// Eventually mock some method
// PS You can return a concrete instance too
// $fooMockObj= new \MyBundle\Entity\Foo();
$this->fooManager
->expects($this->any())
->method('find')
// ->with($anOptionalInputId)
->will($this->returnValue($fooMockObj));
希望这个帮助