MVC4 - TryValidateModel 中断单元测试



>我有以下控制器方法

    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 创建吗?

在这种情况下

using Moq;
.........
        readonly MockRepository _mockRepository = new MockRepository(MockBehavior.Default);
.........
        controller.ControllerContext = _mockRepository.Create<ControllerContext>().Object;

效果很好。

最好。

最新更新