2

我已经使用 IValidatableObject 为一些实体框架对象编写了一些自定义验证,并且我已经向对象添加了一些 DataAnnotations 以进行验证。

我想测试验证是否满足所需的验证(确保自定义验证正常工作并且所做的任何更改都会保留这些数据注释等......)但我无法确定如何在不调用的情况下在单元测试中运行验证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);
}

但似乎无法找到一种在不调用保存更改的情况下运行验证的方法,有没有办法做到这一点?

4

1 回答 1

5

您可以调用Validator来验证对象。

[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);
}
于 2012-07-17T00:50:29.803 回答