gpt4 book ai didi

asp.net-mvc-4 - 如何为 IValidatableObject 模型编写单元测试

转载 作者:行者123 更新时间:2023-12-04 22:12:25 24 4
gpt4 key购买 nike

我创建了一个 ViewModel,如下所示。

   public class ProjectViewModel: IValidatableObject
{
public int ProjectID { get; set; }

[DisplayName("Name")]
[Required]
public string Name { get; set; }

[DisplayName("Start Date")]
public DateTime StartDate { get; set; }

[DisplayName("End Date")]
[Compare("EndDate")]
public DateTime EndDate { get; set; }

[DisplayName("Project States")]
public List<ProjectStateViewModel> States { get; set; }
public string PageTitle { get; set; }


public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
List<ValidationResult> res = new List<ValidationResult>();
if (EndDate <= StartDate)
{
res.Add( new ValidationResult(ErrorMessage.END_DATE_AFTER_START_DATE));
}

return res;
}
}

还写了下面的测试用例
[TestMethod]
[ExpectedException( typeof(ValidationException),"End Date must be greater than Start Date.")]
public void Create_New_Project_EndDate_Earlier_StartDate()
{
ProjectViewModel model = new ProjectViewModel
{
ProjectID = 3,
Name = "Test Project",
StartDate = DateTime.Now.Date,
EndDate = DateTime.Now.AddMonths(-1),
States = new List<ProjectStateViewModel> { new ProjectStateViewModel { StateName = "Pending" } }
};

Task<ActionResult> task = _projectController.Edit(model);

ViewResult result = task.Result as ViewResult;

}

当实际代码通过浏览器在 MVC 应用程序中执行时,它工作正常。但是 ModelState.IsValid 在我的单元测试中总是返回 true 并且它失败了。 后来我明白了验证不是由 Controller 执行的。 Controller 在验证发生后收到模型,因此它将具有适当的 ModelState。 我的问题是我应该用什么方法来编写模型验证的单元测试,还是应该编写它?

最佳答案

您可以直接调用该方法并对其结果进行断言。

[TestMethod]
public void Create_New_Project_EndDate_Earlier_StartDate()
{
ProjectViewModel model = new ProjectViewModel
{
ProjectID = 3,
Name = "Test Project",
StartDate = DateTime.Now.Date,
EndDate = DateTime.Now.AddMonths(-1),
States = new List<ProjectStateViewModel> { new ProjectStateViewModel { StateName = "Pending" } }
};

var validationContext = new ValidationContext(model);

var results = model.Validate(validationContext);

Assert.AreEqual(results.Count(), 1);
Assert.AreEqual(results.First().ErrorMessage, "End Date must be greater than Start Date.");
}

关于asp.net-mvc-4 - 如何为 IValidatableObject 模型编写单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24593005/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com