I am trying mock the AbstractQuery
class of doctrine
$this->abstractQuery = $this->getMockForAbstractClass('Doctrine\ORM\AbstractQuery')
->disableOriginalConstructor();
Now I will do my stub
$this->abstractQuery->expects($this->at(1))
->method('getResult')
->willReturn('our query result');
I getting this error
Argument 1 passed to Doctrine\ORM\AbstractQuery::__construct() must be an instance of Doctrine\ORM\EntityManagerInterface, none given
disabledOriginalConstructor
phpunit's method by default is false
/...
public function disableOriginalConstructor()
{
$this->originalConstructor = false;
return $this;
}
/...
and getMockForAbstractClass
method it took that value
public function getMockForAbstractClass()
{
$object = $this->generator->getMockForAbstractClass(
$this->type,
$this->constructorArgs,
$this->mockClassName,
$this->originalConstructor,
$this->originalClone,
$this->autoload,
$this->methods,
$this->cloneArguments
);
$this->testCase->registerMockObject($object);
return $object;
}
any idea ?
disableOriginalConstructor()
is the API of MockBuilder
class and NOT of class that you get with $this->getMockForAbstractClass('Doctrine\ORM\AbstractQuery')
There are 2 options.
1) First:
Still using method getMockForAbstractClass
$this->abstractQuery = $this->getMockForAbstractClass(
'Doctrine\ORM\AbstractQuery',
[], // default value
'', // default value
false, // this is $callOriginalConstructor argument
true, // default value
true, // default value
['getResult'] // here we define methods that we want to mock
);
2) Second:
Using MockBuilder
$this->abstractQuery = $this
->getMockBuilder('Doctrine\ORM\AbstractQuery')
->setMethods(['getResult'])
->disableOriginalConstructor()
->getMockForAbstractClass();
I personally prefer MockBuilder because it is more readable.