gdo*_*ica 23 c# asp.net-mvc unit-testing modelstate asp.net-mvc-3
在测试我的控制器的动作时,ModelState始终有效.
public class Product
{
public int Id { get; set; }
[Required]
[StringLength(10)]
public string Name { get; set; }
[Required]
public string Description { get; set; }
[Required]
public decimal Price { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
而我的控制器.
public class ProductController : Controller
{
[HttpPost]
public ActionResult Create(Product product)
{
if (ModelState.IsValid)
{
// Do some creating logic...
return RedirectToAction("Display");
}
return View(product);
}
}
Run Code Online (Sandbox Code Playgroud)
并测试:
[Test]
public TestInvalidProduct()
{
var product = new Product();
var controller = new ProductController();
controller.Create(product);
//controller.ModelState.IsValid == true
}
Run Code Online (Sandbox Code Playgroud)
当产品没有名称,描述和价格时,为什么modelState有效?
Dan*_*Dan 18
当发布的数据绑定到视图模型时,将进行验证.然后将视图模型传递到控制器中.您正在跳过第1部分并将视图模型直接传递到控制器中.
您可以使用手动验证视图模型
System.ComponentModel.DataAnnotations.Validator.TryValidateObject()
Run Code Online (Sandbox Code Playgroud)
Jer*_*vel 10
我也碰到过同样的问题,并同时接受的答案在这里没有解决"无验证" -issue,它没有让我有一个很大的消极方面:它会抛出一个异常,当有验证错误,而不是简单的设置ModelState.Invalid来false.
我只在Web Api 2中对此进行了测试,因此我不知道哪些项目可用,但有一种方法ApiController.Validate(object)强制验证传递的对象并仅设置ModelState.IsValid为false.此外,您还必须实例化该Configuration属性.
将此代码添加到我的单元测试允许它工作:
userController.Configuration = new HttpConfiguration();
userController.Validate(addressInfo);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14913 次 |
| 最近记录: |