createPartialMock( $serviceDefinition['class'], array_keys($serviceDefinition['methods']) ); foreach ($serviceDefinition['methods'] as $mName=>$mVal){ $mockingService->method($mName)->willReturn($mVal); } if(isset($serviceDefinition['subServices'])) foreach ($serviceDefinition['subServices'] as $subService){ $mockingService->instant( $subService['serviceName'], ($subServiceMock=function()use($subService){ $subServiceMock=$this->createPartialMock( $subService['class'], array_keys($subService['methods']) ); if(isset($subService['methods'])) foreach ($subService['methods'] as $methodName=>$methodVal){ $subServiceMock->method($methodName)->willReturn($methodVal); } return $subServiceMock; })() ); } return $mockingService; } }