/** * Returns a mock object for the specified class. * * @param string $originalClassName * @param array $methods * @param array $arguments * @param string $mockClassName * @param boolean $callOriginalConstructor * @param boolean $callOriginalClone * @param boolean $callAutoload * @return PHPUnit_Framework_MockObject_MockObject * @throws InvalidArgumentException * @since Method available since Release 3.0.0 */ protected function getMock($originalClassName, $methods = array(), array $arguments = array(), $mockClassName = '', $callOriginalConstructor = TRUE, $callOriginalClone = TRUE, $callAutoload = TRUE) { if (!is_string($originalClassName)) { throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'string'); } if (!is_string($mockClassName)) { throw PHPUnit_Util_InvalidArgumentHelper::factory(4, 'string'); } if (!is_array($methods) && !is_null($methods)) { throw new InvalidArgumentException(); } if ($mockClassName != '' && class_exists($mockClassName, FALSE)) { throw new PHPUnit_Framework_Exception(sprintf('Class "%s" already exists.', $mockClassName)); } $mock = PHPUnit_Framework_MockObject_Generator::generate($originalClassName, $methods, $mockClassName, $callOriginalClone, $callAutoload); if (!class_exists($mock['mockClassName'], FALSE)) { eval($mock['code']); } if ($callOriginalConstructor && !interface_exists($originalClassName, $callAutoload)) { if (count($arguments) == 0) { $mockObject = new $mock['mockClassName'](); } else { $mockClass = new ReflectionClass($mock['mockClassName']); $mockObject = $mockClass->newInstanceArgs($arguments); } } else { // Use a trick to create a new object of a class // without invoking its constructor. $mockObject = unserialize(sprintf('O:%d:"%s":0:{}', strlen($mock['mockClassName']), $mock['mockClassName'])); } $this->mockObjects[] = $mockObject; return $mockObject; }
private static function generateMockClass($name, $extends) { $mock_class = \PHPUnit_Framework_MockObject_Generator::generate($extends, null, $name); eval($mock_class['code']); }