【发布时间】:2013-10-14 16:03:34
【问题描述】:
我有以下控制器方法
public ActionResult Create(Category category)
{
//default values
if (string.IsNullOrEmpty(category.GeoAreaLevelIdentifier))
{
category.GeoAreaLevelIdentifier = "OutputArea";
}
category.CreatorIdentifier = EsdContext.User.UniqueIdentifier.ToString();
category.Created = DateTime.Now;
//validation
RevalidateModel(category);
new CategoryBroker().Create(category);
return JsonNow(category);
}
将一些默认值填充到模型中,然后对其进行验证。这是因为允许客户端代码在没有某些必填字段的情况下提交模型。缺失的字段由控制器填充(见上文)。
RevalidateModel 方法调用 TryValidateModel:
protected void RevalidateModel(object model)
{
ModelState.Clear();
TryValidateModel(model); //called explicitly since model has been updated
if (!ModelState.IsValid)
{
//error message
}
}
但是当我从单元测试中调用 Create 方法时,它会失败,因为 TryValidateModel 需要 controllerContext:
Value cannot be null.Parameter name: controllerContext
解决此问题的最佳方法是什么? 我应该通过 MvcContrib TestHelper 创建 controllerContext 吗?
【问题讨论】:
-
是的,您需要模拟控制器上下文才能从单元测试中调用此方法。
-
@mayabelle "你需要模拟控制器上下文" - 你知道最好的方法吗?你试过 MvcContrib.TestHelper 吗?
标签: unit-testing validation asp.net-mvc-4 mvccontrib