1

如何为实体框架对象创建单元测试以验证使用 [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);

问题是我无法将空值指示给整数属性。是否有可能以另一种方式测试此验证?谢了。

4

3 回答 3

1

如果验证失败,null那么这里就没有什么可以测试的了,Int32永远不会null。如果您想将null其类型更改为Int32?(或更好:)int?。如果验证因其他原因而失败,则不要放入null您的属性中,而是放入其他一些错误的值。

于 2013-09-13T15:02:20.800 回答
1

Int32除非nullInt32?

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

Assert.AreNotEqual(0, error);

于 2013-09-13T15:08:31.823 回答
0

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

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

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

        Assert.IsFalse(attribute.IsNullable);

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

于 2013-09-16T08:43:56.260 回答