views:

35

answers:

1

Using .Net 3.5

I have a Range Attributes (System.ComponentModel.DataAnnotations) on a Property...

   [Range(0, 5, ErrorMessage = "Weight must be between 0 and 5")]
    public virtual double Weight{ get; set; }

And I have a Validate method in the class that checks validation attributes...

protected virtual void Validate()
{
    var type = this.GetType();
    foreach (var property in type.GetProperties())
    {
        foreach (ValidationAttribute attribute in 
            property.GetCustomAttributes(typeof(ValidationAttribute),true))
        {
            if(!attribute.IsValid(property.GetValue(this, null)))
            {
                BrokenRules.Add(attribute.ErrorMessage);
            }
        }
    }
}

    public virtual bool IsValid()
    {
        return GetBrokenRules().Count == 0;
    }

And I have an NUnit test that tests the validation...

[TestCase(-.1, Result = false)] // fails
[TestCase(0.0, Result = true)]
[TestCase(5.0, Result = true)]
[TestCase(5.1, Result = false)]  // fails
public bool ItValidatesWeight(double weight)
{
    _ornament.Weight = weight;
    return _ornament.IsValid();
}

Required attributes are working properly but on the class and test correctly, but the Range attributes are not. Any suggestions?

A: 

It was interpreting the attribute as using the int overload.

It worked with:

[Range(0.0, 5.0, ErrorMessage = "Weight must be between 0 and 5")]
    public virtual double Weight{ get; set; }
Tim Hoolihan