async Task <ValidationResult> ExerciseNonGenericSut(string validated,
                                                            ValidationOptions options,
                                                            RuleThrowingBehaviour behaviour,
                                                            params RuleResult[] ruleResults)
        {
            var result = new ValidationResult <string>(ruleResults.Select(x => new ValidationRuleResult(x, null, null)), new Manifest.ValidationManifest {
                ValidatedType = typeof(string)
            });
            var wrapped = new Mock <IValidator <string> >();

            wrapped.As <IValidator>().Setup(x => x.ValidateAsync(validated, options, default)).Returns(Task.FromResult <ValidationResult>(result));
            var sut = new ThrowingBehaviourValidatorDecorator <string>(wrapped.Object, Mock.Of <IGetsResolvedValidationOptions>(x => x.GetResolvedValidationOptions(options) == new ResolvedValidationOptions {
                RuleThrowingBehaviour = behaviour
            }));

            options.RuleThrowingBehaviour = behaviour;
            return(await sut.ValidateAsync((object)validated, options).ConfigureAwait(false));
        }
        async Task <IQueryableValidationResult <string> > ExerciseGenericSut(ThrowingBehaviourValidatorDecorator <string> sut,
                                                                             string validated,
                                                                             ValidationOptions options,
                                                                             IValidator <string> wrapped,
                                                                             IGetsResolvedValidationOptions optionsResolver,
                                                                             RuleThrowingBehaviour behaviour,
                                                                             params RuleResult[] ruleResults)
        {
            var result = new ValidationResult <string>(ruleResults.Select(x => new ValidationRuleResult(x, null, null)), new Manifest.ValidationManifest {
                ValidatedType = typeof(string)
            });

            Mock.Get(wrapped).Setup(x => x.ValidateAsync(validated, options, default)).Returns(Task.FromResult <IQueryableValidationResult <string> >(result));
            options.RuleThrowingBehaviour = behaviour;
            Mock.Get(optionsResolver).Setup(x => x.GetResolvedValidationOptions(options)).Returns(new ResolvedValidationOptions {
                RuleThrowingBehaviour = behaviour
            });
            return(await sut.ValidateAsync(validated, options).ConfigureAwait(false));
        }