Chr*_*Dog 2 validation unit-testing entity-framework
我已经使用IValidatableObject为某些Entity Framework对象编写了一些自定义验证,并且向对象添加了一些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);
}
Run Code Online (Sandbox Code Playgroud)
或类似的东西
[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);
}
Run Code Online (Sandbox Code Playgroud)
但是似乎无法找到一种无需调用保存更改即可使验证运行的方法,有没有办法做到这一点?
您可以调用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);
}
Run Code Online (Sandbox Code Playgroud)