KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I've got a problem with mocking an overloaded __get($index) method. The code for the class to be mocked and the system under test that consumes it is as follows: <?php class ToBeMocked { protected $vars = array(); public function __get($index) { if (isset($this->vars[$index])) { return $this->vars[$index]; } else { return NULL; } } } class SUTclass { protected $mocky; public function __construct(ToBeMocked $mocky) { $this->mocky = $mocky; } public function getSnack() { return $this->mocky->snack; } } Test looks as follows: <?php class GetSnackTest extends PHPUnit_Framework_TestCase { protected $stub; protected $sut; public function setUp() { $mock = $this->getMockBuilder('ToBeMocked') ->setMethods(array('__get') ->getMock(); $sut = new SUTclass($mock); } /** * @test */ public function shouldReturnSnickers() { $this->mock->expects($this->once()) ->method('__get') ->will($this->returnValue('snickers'); $this->assertEquals('snickers', $this->sut->getSnack()); } } Real code is a little bit more complex, though not much, having "getSnacks()" in its parent class. But this example should suffice. Problem is I get the following error, when executing the test with PHPUnit: Fatal error: Method Mock_ToBeMocked_12345672f::__get() must take exactly 1 argument in /usr/share/php/PHPUnit/Framework/MockObject/Generator.php(231) When I debug I can't even reach the test method. It seems it breaks at setting up the mock object. Any ideas?
Tags (comma-separated)
Save Edits
Cancel