如何为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值。是否有可能以另一种方式测试此验证? 韩国社交协会。
答案 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。