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

发布于 2024-10-09 07:44:39 字数 177 浏览 4 评论 0原文

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

我想对上述方法进行单元测试。我正在使用 P1 和 P2 值填充表单集合,但从单元测试调用时模型未正确构建。

有人遇到过类似的问题吗?

I am having a controller method which accepts FormCollection as a parameter.
the controller method then builds the model using UpdateModel(Model, new[] { P1, P2 });

I would like to unit test the above method. I am populating the formcollection with P1 and P2 values but the model is not build correctly when called from unit testing.

Has anyone faced similar issue?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不气馁 2024-10-16 07:44:39

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
    ...
}

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

The UpdateModel method looks in the Request object when populating the model and it completely ignores this FormCollection you are passing. So you will need to mock the request and add the values to this object. But thats lots of work that isn't worth the efforts and I would recommend you a better way: instead of using FormCollection as action parameter and then calling UpdateModel inside your action use a strongly typed action parameter:

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
    ...
}

and in the unit test simply pass the desired model when invoking the controller action.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文