/** * @param string $methodName * @return Spy */ public function spy($methodName) { $context = $this->_createContext($methodName); $this->_manager->removeByContext($context); $invokable = new Spy(); $override = new Override($context, $invokable); $this->_manager->add($override); return $invokable; }
/** * @param string $name * @param array $arguments * @return mixed * @throws Exception */ private static function _callStaticMethod($name, array $arguments) { $classDefinition = new ClassDefinition(get_called_class()); $originalMethod = $classDefinition->findOriginalMethod($name); $manager = Manager::getInstance(); $classOverrides = new ClassOverrides($manager, get_called_class()); $override = $classOverrides->find($name); if ($override) { $invokable = $override->getInvokable(); if ($invokable instanceof Spy) { $returnValue = null; if ($originalMethod) { $returnValue = call_user_func_array($originalMethod, $arguments); } $invokable->addInvocation(null, $arguments, $returnValue); return $returnValue; } if ($invokable instanceof Stub) { return $invokable->invoke(null, $arguments); } throw new Exception('Unsupported invokable'); } if ($originalMethod) { return call_user_func_array($originalMethod, $arguments); } throw new Exception('Cannot find method'); }
/** * @param string $name */ public function unmockMethod($name) { $manager = Manager::getInstance(); $classOverrides = new ClassOverrides($manager, $this->getClassName()); $classOverrides->remove($name); }