I am testing a service with PHPUnit.
I am using setUp()
to create mock objects of the dependencies that my service accepts, like this:
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);
}
Bundle\Tests\Service\MyTest::testServiceWithValidData
/**
* @dataProvider getServiceValidCaseData
*/
public function testServiceWithValidData($case)
{
$this->assertTrue($this->myService->serve($fooArray));
}
It turns out that a entity manager that in my serve()
function, I am having something like this:
return $this->fooManager->find($fooId) !== null;
in this case $this->fooManager is instance of Mock_FooManager_4038382a
and the whole test fails.
Any suggestions are more than welcome.
UPDATE
/**
* @return \PHPUnit_Framework_MockObject_MockBuilder
*/
private function getFooManagerMock()
{
return $this->getMockBuilder(
'\MyBundle\Entity\Manager\FooManager'
)->disableOriginalConstructor()->getMock();
}
Example for @matteo
I was expecting $fooManager->find($id)
to return me a specific instance of Foo, such as:
\MyBundle\Manager\FooManager{
"id" : 234234,
"status" : "pending".
"color" : "yellow",
"tree" : [
"id" : 2345,
"height" :160
]
}
You must specify in the test case which behaviour the mocked entity must do, try adding this code in the
testServiceWithValidData
method, before call the tested service:Hope this help