/**
  * @param \Zend\ServiceManager\ServiceLocatorInterface $serviceLocator
  * @param \Zend\StdLib\RequestInterface                $request
  * @param \Phpro\SmartCrud\Controller\CrudController   $controller
  * @param \Zend\Mvc\Controller\Plugin\Params           $params
  */
 protected function mockServiceLocator($serviceLocator, $request, $controller, $params)
 {
     $prophet = new Prophet();
     $app = $prophet->prophesize('\\Zend\\Mvc\\Application');
     $event = $prophet->prophesize('\\Zend\\Mvc\\MvcEvent');
     if ($controller) {
         $controller->plugin('params')->willReturn($params->getWrappedObject());
         $controller = $controller->getWrappedObject();
     }
     // mock routeMatch
     $routeMatch = $prophet->prophesize('Zend\\Mvc\\Router\\Http\\RouteMatch');
     $routeMatch->getParam('controller')->willReturn('DummyControllerSlag');
     // Mock controller manager
     $controllerManager = $prophet->prophesize('Zend\\Mvc\\Controller\\ControllerManager');
     $controllerManager->get('DummyControllerSlag')->willReturn($controller);
     $serviceLocator->get('controllerLoader')->willReturn($controllerManager);
     // Add application data to mvc event
     $event->getRequest()->willReturn($request->getWrappedObject());
     $event->getRouteMatch()->willReturn($routeMatch);
     $app->getMvcEvent()->willReturn($event);
     $serviceLocator->get('application')->willReturn($app);
 }