Аннотации данных диапазона не работают в .Net 3.5 - PullRequest
1 голос
/ 13 августа 2010

Использование .Net 3.5

У меня есть атрибуты диапазона (System.ComponentModel.DataAnnotations) для свойства ...

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

И у меня есть метод Validate в классе, который проверяет атрибуты проверки ...

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;
    }

И у меня есть тест NUnit, который проверяет проверку ...

[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();
}

Обязательные атрибуты работают правильно, но в классе и тестируются правильно, но атрибуты Range - нет. Есть предложения?

1 Ответ

1 голос
/ 14 августа 2010

Он интерпретировал атрибут как использование перегрузки int.

Работает с:

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