public void ConvertBack_InvalidStringToInt32_ThrowsException(object value, CultureInfo culture, int minimum, int maximum)
        {
            var uut = new Int32ToStringValueConverterAndValidationRule()
            {
                Minimum = minimum,
                Maximum = maximum
            };

            var targetType = typeof(int);
            var parameter = (object)null;

            var result = Should.Throw<Exception>(() =>
            {
                uut.ConvertBack(value, targetType, parameter, culture);
            });

            result.ShouldSatisfyAnyCondition(
                () => result.ShouldSatisfyAllConditions(
                    () => result.ShouldBeOfType<ArgumentException>(),
                    () => (result as ArgumentException)?.ParamName.ShouldBe(nameof(value)),
                    () => (result as ArgumentException)?.Message.ShouldContain(value?.ToString() ?? "null")),
                () => result.ShouldSatisfyAllConditions(
                    () => result.ShouldBeOfType<ArgumentOutOfRangeException>(),
                    () => (result as ArgumentOutOfRangeException)?.ParamName.ShouldBe(nameof(value)),
                    () => (result as ArgumentOutOfRangeException)?.ActualValue.ShouldBe(value),
                    () => (result as ArgumentOutOfRangeException)?.Message.ShouldContain(minimum.ToString()),
                    () => (result as ArgumentOutOfRangeException)?.Message.ShouldContain(maximum.ToString())));
        }
        public void ConvertBack_ConversionIsInvalid_ThrowsException(object value, Type targetType)
        {
            var uut = new Int32ToStringValueConverterAndValidationRule();

            var parameter = (object)null;
            var culture = (CultureInfo)null;

            var result = Should.Throw<NotSupportedException>(() =>
            {
                uut.ConvertBack(value, targetType, parameter, culture);
            });

            result.ShouldSatisfyAllConditions(
                () => result.Message.ShouldContain(value?.GetType().Name ?? "null"),
                () => result.Message.ShouldContain(targetType.Name));
        }
        public void ConvertBack_TargetTypeIsNull_ThrowsException()
        {
            var uut = new Int32ToStringValueConverterAndValidationRule();

            var value = 0;
            var targetType = (Type)null;
            var parameter = (object)null;
            var culture = (CultureInfo)null;

            var result = Should.Throw<ArgumentNullException>(() =>
            {
                uut.ConvertBack(value, targetType, parameter, culture);
            });

            result.ParamName.ShouldBe(nameof(targetType));
        }