Как бы вы аннотировали данные модульного тестирования?

Два свойства класса имеют следующие аннотации:

    [Key]
    [Column]
    [Required]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }


    [MaxLength(25)]
    public string Name { get; set; }

Я понимаю, что тестирование атрибутов Key, Column и Required больше не является модульным тестом, это интеграционный тест, поскольку он будет зависеть от базовой базы данных, но как вы собираетесь тестировать атрибут MaxLength (25 )?

Одна из альтернатив, которые я могу придумать, — это добавить контракт кода в свойство.

Обновление

Как было предложено, я написал следующий хелпер:

    public class AttributeHelper <T> where T : class
    {
        private Type GivenClass 
        { 
            get { return typeof (T); }
        }

        public bool HasAnnotation(Type annotation)
        {
            return GivenClass.GetCustomAttributes(annotation, true).Single() != null;
        }

        public bool MethodHasAttribute(Type attribute, string target)
        {
           return GivenClass.GetMethod(target).GetCustomAttributes(attribute, true).Count() == 1;
        }

        public bool PropertyHasAttribute(Type attribute, string target)
        {
            return GivenClass.GetProperty(target).GetCustomAttributes(attribute, true).Count() == 1;
        }

    }

Затем я протестировал свой хелпер:

    [TestMethod]
    public void ThisMethod_Has_TestMethod_Attribute()
    {
        // Arrange
        var helper = new AttributeHelper<AttributeHelperTests>();

        // Act
        var result = helper.MethodHasAttribute(typeof (TestMethodAttribute), "ThisMethod_Has_TestMethod_Attribute");

        // Assert
        Assert.IsTrue(result);
    }

Все работает нормально, за исключением того факта, что методы и свойства должны быть общедоступными, чтобы я мог использовать отражение. Я не могу вспомнить ни одного случая, когда мне приходилось добавлять атрибуты в частные свойства/методы.

А затем тестирование аннотаций EF:

        public void IdProperty_Has_KeyAttribute()
        {
            // Arrange
            var helper = new AttributeHelper<Player>();

            // Act
            var result = helper.PropertyHasAttribute(typeof (KeyAttribute), "Id");

            // Assert
            Assert.IsTrue(result);
        }
5
задан 21 April 2012 в 16:45
поделиться