使用FormCollection参数的MVC单元测试控制器方法

时间:2010-12-28 16:27:24

标签: unit-testing asp.net-mvc-2 asp.net-mvc-controller

我有一个接受FormCollection作为参数的控制器方法。 然后,控制器方法使用UpdateModel(Model,new [] {P1,P2});

构建模型

我想对上述方法进行单元测试。我正在使用P1和P2值填充formcollection,但是从单元测试中调用时模型没有正确构建。

有没有人遇到类似问题?

1 个答案:

答案 0 :(得分:3)

UpdateModel方法在填充模型时查看Request对象,它完全忽略了您传递的FormCollection。因此,您需要模拟请求并将值添加到此对象。但是那些不值得付出努力的工作,我建议你采用更好的方法:而不是使用FormCollection作为操作参数,然后在操作中调用UpdateModel使用强类型的操作参数:

public ActionResult Foo(SomeViewModel model)
{
    // The model binder will automatically call UpdateModel and populate
    // the model from the request so that you don't need to manually
    // do all this stuff
    ...
}

并且在单元测试中,只需在调用控制器动作时传递所需的模型。