Глядя на трассировку стека, похоже, что исключение выдается при вызове TryUpdateModel(newStudy)
.Я могу только представить, что либо объект Study
, который возвращается new Study()
, не удовлетворяет требованиям TryUpdateModel()
, либо существует некоторая зависимость, которая требуется ASP.NET MVC для того, чтобы этот метод работал, чтоотсутствует в контексте теста, но присутствует в контексте времени выполнения (при условии, что метод контроллера работает для вас при запуске функционального теста).
Если метод работает во время функционального теста, то последнее объяснение должно выполняться,Опять же, посмотрим на трассировку стека:context, Func1 & formGetter, Func1 & queryStringGetter) в System.Web.Helpers.Validation.Unvalidated (запрос HttpRequest) в
Похоже, что HttpRequest
используется для выполнения некоторой проверки.Я полагаю, что вашему объекту фиктивного запроса необходимо установить некоторые дополнительные возвращаемые значения метода / свойства.В частности, я полагаю, что он должен по крайней мере возвращать NameValueCollection
экземпляров из его свойств Form
и QueryString
, даже просто пустых.Разумно предположить, что код проверки в MVC предполагает, что эти свойства никогда не возвращают нулевые значения.Учитывая, что вы не установили возвращаемые значения для этих свойств в своих фиктивных объектах, это объяснило бы, почему NullReferenceException
вбрасывается глубоко в код MVC.
Попробуйте добавить эти строки в свой код создания фиктивных объектов.: -
request.SetupGet(req => req.Form).Returns(new NameValueCollection());
request.SetupGet(req => req.QueryString).Returns(new NameValueCollection());
В зависимости от требований вашего теста и / или контроллера, вы можете обнаружить, что вам придется добавить некоторые значения как минимум в один из NameValueCollection
экземпляров, чтобы более точновысмеивать содержание реального запроса.