это всегда было намного сложнее, чем нужно было. В конце концов, решение простое и достаточно элегантное, хотя я предпочел бы найти какой-нибудь традиционный способ сделать это.
Хитрость заключается в добавлении параметра FormCollection к действию:
это будет введено 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 - не работает, вам нужно убедиться, что у вашего контроллера есть controlcontext И вам нужно будет вызвать expiness, вызывая UpdateModel:
controller.ControllerContext = new ControllerContext();
...
UpdateModel(manageUsersViewModel, form.ToValueProvider());
MVC 3 и я должен вернуться к этому, чтобы проверить простую отправку формы. БЕЗУМНОЕ В МЕМБРАНЕ