Поскольку я обновил с MVC 2 до MVC 3 RC, использование TryUpdateModel вызывает исключение NullReferenceException. Эта проблема возникает только при запуске моего метода действий как части единичного теста. Запуск его на самом сервере работает, как ожидалось.TryUpdateModel throws NullReferenceException в ASP.NET MVC 3 unit test
Вот стека след за исключением:
System.NullReferenceException: Объект ссылка не указывает на экземпляр объекта . на System.Web.Mvc.JsonValueProviderFactory.GetValueProvider (ControllerContext controllerContext) на System.Web.Mvc.ValueProviderFactoryCollection. <> c_ DisplayClassc.b _7 (ValueProviderFactory завод) в System.Linq.Enumerable.WhereSelectEnumerableIterator
2.MoveNext() at System.Linq.Enumerable.WhereSelectEnumerableIterator
2.MoveNext() в System.Collections.Generic.List коллекция) в System.Linq. Enumerable.ToList [TSource] (IEnumerable`1 источник) в System.Web.Mvc.ValueProviderFactoryCollection.GetValueProvider (ControllerContext controllerContext) при System.Web.Mvc.Controller.TryUpdateModel [TModel] (TModel модели, префикс Строка)
... мой собственный код f ром здесь ....
В случае это особенно важно, мой контроллер имеет следующую подпись:
[AcceptVerbs(HttpVerbs.Post)]
public virtual ActionResult Edit(int id, FormCollection collection)
{
}
Я думаю, что это связано с новым способом DI работает в MVC3, но Я не могу понять, что я делаю неправильно. Возможно, есть что-то с точки зрения установки DI, которая требуется в MVC 3, но не требуется в MVC 2?
Это не очень хорошая идея, потому что вы добавляете код для облегчения тестов в производственный код. Он также выполняется по каждому запросу, и это совершенно необязательно. –
Почему бы просто не использовать строку «ValueProvider = ...» в настройке вашего контроллера в своих модульных тестах. – JoelFan