我有以下控制器方法
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
解决此问题的最佳方法是什么? 我应该创建controllerContext,例如通过MvcContrib TestHelper?
答案 0 :(得分:0)
在这种情况下
using Moq;
.........
readonly MockRepository _mockRepository = new MockRepository(MockBehavior.Default);
.........
controller.ControllerContext = _mockRepository.Create<ControllerContext>().Object;
效果很好。
最佳。