Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 单元测试实体框架验证_Entity Framework_Unit Testing_Validation - Fatal编程技术网

Entity framework 单元测试实体框架验证

Entity framework 单元测试实体框架验证,entity-framework,unit-testing,validation,Entity Framework,Unit Testing,Validation,我已经使用IValidatableObject为一些实体框架对象编写了一些自定义验证,并向这些对象添加了一些数据注释以进行验证 我想测试验证是否满足所需的验证(确保自定义验证工作正常,并且所做的任何更改都保留了这些数据注释等),但如果不调用SaveChanges,我无法确定如何在单元测试中运行验证(我不想这样做,就好像有问题,验证不起作用一样,它会写入数据源) 我想做这样的事情: [TestMethod] public void InvalidStartDate_StartDateAfterEn

我已经使用IValidatableObject为一些实体框架对象编写了一些自定义验证,并向这些对象添加了一些数据注释以进行验证

我想测试验证是否满足所需的验证(确保自定义验证工作正常,并且所做的任何更改都保留了这些数据注释等),但如果不调用SaveChanges,我无法确定如何在单元测试中运行验证(我不想这样做,就好像有问题,验证不起作用一样,它会写入数据源)

我想做这样的事情:

[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