实体框架对象的整数属性验证的单元测试

时间:2013-09-13 14:57:30

标签: asp.net-mvc entity-framework unit-testing validation

如何为Entity Framework对象创建单元测试,以验证使用[required]键注释的整数属性验证,如下所示:

[Required]
public Int32 MyIntProperty { get; set; }

单元测试代码应该是这样的:

        EntityObject entityObject = new EntityObject();
        entityObject.MyIntProperty = null;

        EntityObjectContext.EntityObject.Attach(entityObject);
        EntityObjectContext.ObjectStateManager.ChangeObjectState(entityObject, EntityState.Added);
        var dbContext = new DbContext(EntityObjectContext, true);

        int errors = dbContext.GetValidationErrors().Count();

        Assert.AreEqual(1, errors);

问题是我不能指示整数属性的null值。是否有可能以另一种方式测试此验证? 韩国社交协会。

3 个答案:

答案 0 :(得分:1)

如果验证仅在null上失败,则此处无需测试,因为Int32永远不会null。如果您希望null可以将其类型更改为Int32?(或更好:int?)。如果由于某些其他原因导致验证失败,则不要将null放入您的属性中,而是放入其他一些错误值。

答案 1 :(得分:1)

除非Int32,否则{p> null不能为Int32?

我不知道以下是否符合您的要求,但未初始化时Int32将为0。

Assert.AreNotEqual(0, error);

答案 2 :(得分:0)

我通过测试属性是否由[Required]关键字注释来解决我的问题:

        var propertyInfo = typeof(EntityObject).GetProperty("MyIntProperty");

        var attribute = (EdmScalarPropertyAttribute) 
                        propertyInfo.GetCustomAttributes(
                                typeof(EdmScalarPropertyAttribute), true)
                        .FirstOrDefault();

        Assert.IsFalse(attribute.IsNullable);

如果有人有其他解决方案,请告诉我。 TKS。