Наследование: implements Nelmio\Alice\Generator\Resolver\ChainableParameterResolverInterface, implements Nelmio\Alice\Generator\Resolver\ParameterResolverAwareInterface, use trait Nelmio\Alice\IsAServiceTrait
 public function testThrowsAnExceptionWhenRecursionLimitIsReached()
 {
     $parameter = new Parameter('foo', null);
     $unresolvedParameters = new ParameterBag();
     $resolvedParameters = new ParameterBag();
     $context = new ResolvingContext('foo');
     $decoratedResolverProphecy = $this->prophesize(ChainableParameterResolverInterface::class);
     $decoratedResolverProphecy->resolve(Argument::cetera())->will(function ($args) {
         $hash = spl_object_hash($args[0]);
         return new ParameterBag(['foo' => uniqid($hash)]);
     });
     /* @var ChainableParameterResolverInterface $decoratedResolver */
     $decoratedResolver = $decoratedResolverProphecy->reveal();
     $resolver = new RecursiveParameterResolver($decoratedResolver);
     try {
         $resolver->resolve($parameter, $unresolvedParameters, $resolvedParameters, $context);
         $this->fail('Expected exception to be thrown.');
     } catch (RecursionLimitReachedException $exception) {
         $this->assertEquals('Recursion limit (5 tries) reached while resolving the parameter "foo"', $exception->getMessage());
         $decoratedResolverProphecy->resolve(Argument::cetera())->shouldHaveBeenCalledTimes(5);
     }
     $resolver = new RecursiveParameterResolver($decoratedResolver, 10);
     try {
         $resolver->resolve($parameter, $unresolvedParameters, $resolvedParameters, $context);
         $this->fail('Expected exception to be thrown.');
     } catch (RecursionLimitReachedException $exception) {
         $this->assertEquals('Recursion limit (10 tries) reached while resolving the parameter "foo"', $exception->getMessage());
         $decoratedResolverProphecy->resolve(Argument::cetera())->shouldHaveBeenCalledTimes(15);
     }
 }