public async void Test_BetweenDoubleChecker()
        {
            var checker = new BetweenDoubleChecker <Student>(3d, 10d, _Validation);
            var ex      = Assert.Throws <ArgumentOutOfRangeException>(() => new BetweenDoubleChecker <Student>(33d, 10d, _Validation));

            Assert.Equal("max", ex.ParamName);
            Assert.True(ex.Message.Contains("Max should be larger than min."));

            var result = await checker.ValidateAsync(new ValidateResult(), 4d, "", "");

            Assert.True(result.IsValid);

            result = await checker.ValidateAsync(new ValidateResult(), 3d, "a", "c");

            Assert.False(result.IsValid);
            Assert.Equal(1, result.Failures.Count);
            Assert.Equal("a", result.Failures[0].Name);
            Assert.Equal("c", result.Failures[0].Error);
            Assert.Equal(3d, result.Failures[0].Value);

            result = await checker.ValidateAsync(new ValidateResult(), 1d, "a1", "c1");

            Assert.False(result.IsValid);
            Assert.Equal(1, result.Failures.Count);
            Assert.Equal("a1", result.Failures[0].Name);
            Assert.Equal("c1", result.Failures[0].Error);
            Assert.Equal(1d, result.Failures[0].Value);

            result = await checker.ValidateAsync(new ValidateResult(), 10d, "b", null);

            Assert.False(result.IsValid);
            Assert.Equal(1, result.Failures.Count);
            Assert.Equal("b", result.Failures[0].Name);
            Assert.Equal("The value is not between 3 and 10", result.Failures[0].Error);
            Assert.Equal(10d, result.Failures[0].Value);

            result = await checker.ValidateAsync(new ValidateResult(), 100d, "b1", null);

            Assert.False(result.IsValid);
            Assert.Equal(1, result.Failures.Count);
            Assert.Equal("b1", result.Failures[0].Name);
            Assert.Equal("The value is not between 3 and 10", result.Failures[0].Error);
            Assert.Equal(100d, result.Failures[0].Value);
        }
        public async void Test_BetweenDoubleChecker()
        {
            var checker = new BetweenDoubleChecker<Student>(3d, 10d, _Validation);
            var ex = Assert.Throws<ArgumentOutOfRangeException>(() => new BetweenDoubleChecker<Student>(33d, 10d, _Validation));
            Assert.Equal("max", ex.ParamName);
            Assert.True(ex.Message.Contains("Max should be larger than min."));

            var result = await checker.ValidateAsync(new ValidateResult(), 4d, "", "");
            Assert.True(result.IsValid);

            result = await checker.ValidateAsync(new ValidateResult(), 3d, "a", "c");
            Assert.False(result.IsValid);
            Assert.Equal(1, result.Failures.Count);
            Assert.Equal("a", result.Failures[0].Name);
            Assert.Equal("c", result.Failures[0].Error);
            Assert.Equal(3d, result.Failures[0].Value);

            result = await checker.ValidateAsync(new ValidateResult(), 1d, "a1", "c1");
            Assert.False(result.IsValid);
            Assert.Equal(1, result.Failures.Count);
            Assert.Equal("a1", result.Failures[0].Name);
            Assert.Equal("c1", result.Failures[0].Error);
            Assert.Equal(1d, result.Failures[0].Value);

            result = await checker.ValidateAsync(new ValidateResult(), 10d, "b", null);
            Assert.False(result.IsValid);
            Assert.Equal(1, result.Failures.Count);
            Assert.Equal("b", result.Failures[0].Name);
            Assert.Equal("The value is not between 3 and 10", result.Failures[0].Error);
            Assert.Equal(10d, result.Failures[0].Value);

            result = await checker.ValidateAsync(new ValidateResult(), 100d, "b1", null);
            Assert.False(result.IsValid);
            Assert.Equal(1, result.Failures.Count);
            Assert.Equal("b1", result.Failures[0].Name);
            Assert.Equal("The value is not between 3 and 10", result.Failures[0].Error);
            Assert.Equal(100d, result.Failures[0].Value);
        }