Entity framework 单元测试实体框架验证
我已经使用IValidatableObject为一些实体框架对象编写了一些自定义验证,并向这些对象添加了一些数据注释以进行验证 我想测试验证是否满足所需的验证(确保自定义验证工作正常,并且所做的任何更改都保留了这些数据注释等),但如果不调用SaveChanges,我无法确定如何在单元测试中运行验证(我不想这样做,就好像有问题,验证不起作用一样,它会写入数据源) 我想做这样的事情:Entity framework 单元测试实体框架验证,entity-framework,unit-testing,validation,Entity Framework,Unit Testing,Validation,我已经使用IValidatableObject为一些实体框架对象编写了一些自定义验证,并向这些对象添加了一些数据注释以进行验证 我想测试验证是否满足所需的验证(确保自定义验证工作正常,并且所做的任何更改都保留了这些数据注释等),但如果不调用SaveChanges,我无法确定如何在单元测试中运行验证(我不想这样做,就好像有问题,验证不起作用一样,它会写入数据源) 我想做这样的事情: [TestMethod] public void InvalidStartDate_StartDateAfterEn
[TestMethod]
public void InvalidStartDate_StartDateAfterEndDate()
{
var header = new Header()
{
StartDate = DateTime.Now.AddDays(15),
EndDate = DateTime.Now.AddDays(-15)
};
var actual = header.IsValid();
var expected = false;
Assert.AreEqual(expected, actual);
}
或者类似的
[TestMethod]
public void InvalidStartDate_StartDateAfterEndDate()
{
var header = new Header()
{
StartDate = DateTime.Now.AddDays(15),
EndDate = DateTime.Now.AddDays(-15)
};
var actual = header.GetValidationErrors().Count;
var expected = 0;
Assert.AreEqual(expected, actual);
}
但是,如果不调用save changes,似乎找不到运行验证的方法,有没有办法做到这一点?您可以调用来验证对象
[TestMethod]
public void InvalidStartDate_StartDateAfterEndDate()
{
var header = new Header()
{
StartDate = DateTime.Now.AddDays(15),
EndDate = DateTime.Now.AddDays(-15)
};
var context = new ValidationContext(header, null, null);
var results = new List<ValidationResult>();
var actual = Validator.TryValidateObject(header, context, results);
var expected = false;
Assert.AreEqual(expected, actual);
}
[TestMethod]
公共无效InvalidStartDate\u StartDateAfterEndDate()
{
var header=newheader()
{
StartDate=DateTime.Now.AddDays(15),
EndDate=DateTime.Now.AddDays(-15)
};
var context=newvalidationcontext(头,null,null);
var results=新列表();
var actual=Validator.TryValidateObject(标题、上下文、结果);
预期风险值=假;
断言.AreEqual(预期、实际);
}
db.GetValidationErrors()应该可以。你能为你的Header类发布代码吗?TryValidateObject上有第四个参数,它是一个布尔值,负责迭代所有属性,甚至那些不需要作为属性的属性-如果你忽略它,一些验证将不会发生。@Eranga,如果你能更新你的答案以包含它,那就太好了,谢谢s