ASP.NET MVC 3 beta: TryUpdateModel генерирует исключение NullreferenceException в модульном тесте - PullRequest
3 голосов
/ 27 октября 2010

Поскольку я обновил ASP.NET MVC 3 Beta 1, я получаю NullReferenceException всякий раз, когда я вызываю TryUpdateModel() во время сеанса модульного тестирования.

Трассировка стека выглядит следующим образом:

Выполнить 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 1..ctor(IEnumerable 1) в System.Linq.Enumerable.ToList [TSource] (IEnumerable 1 source) at System.Web.Mvc.ValueProviderFactoryCollection.GetValueProvider(ControllerContext controllerContext) at System.Web.Mvc.ControllerBase.get_ValueProvider() at Zeiterfassung.Controllers.ControllerBase 1.TryUpdateModelAndTrackChanges [TModel] (модель TModel, префикс строки) в C: \ Users \ Adrian \ Documents \ Sites \ Zeiterfassung \ Zeiterfassung \ Zebrafassung \ ControllerBase.Base : строка 164 ... Мой собственный код здесь ...

Тот же метод действия отлично работает при работе на веб-сервере, поэтому я предполагаю, что это проблема с внедрением зависимостей в модульном тестировании.

Что-то мне нужно настроить, чтобы это работало? Я бы предпочел не возвращаться к предыдущей версии ASP.NET MVC, если это возможно.

Ответы [ 2 ]

2 голосов
/ 27 октября 2010

Вам нужно издеваться над ControllerContext.Лично я использую MvcContrib.TestHelper , который основан на Rhino Mocks , чтобы добиться этого:

// arrange
var controller = new HomeController();
new TestControllerBuilder().InitializeController(controller);

// act
var actual = controller.Index();

, но любой фальшивый фреймворк может выполнить эту работу.Вам просто нужно убедиться, что в вашем модульном тесте controller.ControllerContext не равно нулю.

0 голосов
/ 02 декабря 2010

Если вы используете только Rhino Mocks (без MvcContrib.TestHelper), попробуйте следующее:

controller = new HomeController(repository);
controller.ControllerContext = MockRepository.GenerateStub<ControllerContext>();

Лично я на самом деле создаю переменную уровня Test Class:

private HomeController controller;

Затем длякаждый тест я заново инициализирую эту переменную:

[TestInitialize()]
public void MyTestInitialize()
{
    controller = new HomeController();
    controller.ControllerContext = MockRepository.GenerateStub<ControllerContext>();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...