我的Model类如下:
public class PostInputViewModel
{
[Required]
[MinLength(1)]
[MaxLength(125)]
public string Title { get; set; }
[Required]
[AllowHtml]
[Display(Name="Content")]
public string Content { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和控制器如下:
[HttpPost]
public ActionResult Write(PostInputViewModel input)
{
if (!ModelState.IsValid)
return View(input);
var post = new Post
{
Title = input.Title,
Content = input.Content,
DateCreated = DateTime.Now,
DateModified = DateTime.MaxValue,
};
dbContext.Posts.Add(post);
dbContext.SaveChanges();
return RedirectToAction("Index", "Home");
}
Run Code Online (Sandbox Code Playgroud)
当我通过单击F5运行Web应用程序时,如果我没有输入标题和内容值,则ModelState.IsValid为false,但是如果我使用单元测试用例测试控制器类,则ModelState.IsValid始终为true.测试用例如下:
[TestMethod]
public void write_should_validate_model()
{
var input = new PostInputViewModel();
input.Title = null;
input.Content = null;
var actionResult = controller.Write(input) as ViewResult;
Assert.IsFalse(actionResult.ViewData.ModelState.IsValid);
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?提前致谢.
如果您想让控制器尝试验证模型,可以TryValidateModel在断言之前调用该方法:
controller.TryValidateModel(input);
Run Code Online (Sandbox Code Playgroud)
但我同意你真的只是测试验证属性.不过可能没问题; 它将验证您的模型是否已应用预期属性.
| 归档时间: |
|
| 查看次数: |
6037 次 |
| 最近记录: |