在单元测试中有任何一个模拟request.form的示例代码,调用控制器并让控制器使用Bind
属性或{{1}成功将模拟request.form绑定到视图模型}?
在我看来这是一个相对常见的要求,但是早上已经过去了,我还没有找到任何既充足又有效的东西。
P.S。我整个上午一直在追逐this因为模型绑定失败而没有运气。
答案 0 :(得分:1)
诀窍是将一个FormCollection参数添加到Action:
这将在运行时由MVC注入,但允许在测试时进行模拟:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Search([Bind(Prefix = "")] ManageUsersViewModel manageUsersViewModel, FormCollection form)
{
在测试中:
var form = new FormCollection
{
{"FindCriteria.SearchText", "searchText"},
{"FindCriteria.AccountIsPending", "true"},
{"FindCriteria.TermsHaveBeenAccepted", "true"}
};
sut.Search(new ManageUsersViewModel(), form);
修改强>
此外,您还需要另外两件事 - Bind - 不起作用,您需要确保您的控制器具有controllercontext并且您需要明确调用UpdateModel:
controller.ControllerContext = new ControllerContext();
...
UpdateModel(manageUsersViewModel, form.ToValueProvider());
MVC 3 ,我不得不回复此问题来测试一个简单的表单提交。 在膜中的INSANE