Не удалось выполнить некоторые модульные тесты при переносе проекта с asp.net mvc 1.0 на asp.net mvc 2 beta - PullRequest
0 голосов
/ 01 декабря 2009

Когда я перенес образец приложения SportsStore из Pro ASP.NET MVC Framework Стива Сандерсона (из asp.net 1.0 в mvc 2 beta) с помощью этого приложения, предоставленного Эриком Липтоном , все работает нормально - кроме модульные тесты.
Сообщение об ошибке на обоих:
Tests.CartControllerTests.VeryLongTestMethodName:
System.ArgumentNullException: значение не может быть неопределенным.
Имя параметра: контекст

Я подозреваю, что это связано с тем, что механизм связывания модели по умолчанию в версии 2 поддерживает DataAnnotations, потому что трассировка стекового вызова из NUnit рассказала мне о некоторых проблемах в DefaultModelBinder. Есть идеи как это исправить?
EDIT
Пытался использовать Moq для решения проблемы, но это не сработало. Вот код:

var request = new Moq.Mock<HttpRequestBase>();
request.Setup(r => r.HttpMethod).Returns("POST");
var mockHttpContext = new Moq.Mock<HttpContextBase>();
mockHttpContext.Setup(c => c.Request).Returns(request.Object);
controllerContext = new ControllerContext(mockHttpContext.Object, new RouteData(),
                            new Moq.Mock<ControllerBase>().Object);

Метод, который я тестирую, отправляет только POST. Можно ли поставить «POST» в мои тесты?

Ответы [ 3 ]

2 голосов
/ 02 декабря 2009

Чтобы это работало в ASP.NET MVC 2, вам нужно создать фиктивный ControllerContext и установить его на своем контроллере в разделе инициализации тестового модуля (или «Настройка» или «Организация»).

Вот пример того, как создать фиктивный ControllerContext с помощью библиотеки Moq: Как смоделировать контекст контроллера с помощью moq

1 голос
/ 01 декабря 2009

Подозреваю, что это может быть упущением в конвертере. Если это (примерное) приложение, то не могли бы вы просто открыть приложение в 2.0 и забыть о преобразовании?

Если вы пытаетесь выучить 2.0, тогда, возможно, это не лучший путь вперед.

Если вы проверяете, работает ли конвертер, то, возможно, попробуйте его в реальном приложении, а не в образце.

Рассматривали ли вы оставить комментарий на веб-сайте конвертеров, учитывая, что оставленные там комментарии будут относиться к конвертеру?

Вы действительно пытались пошагово пройти по коду и посмотреть, есть ли что-нибудь очевидное.

Во всяком случае, это то, что я бы попробовал.

0 голосов
/ 28 января 2010

Я считаю, что это все еще проблема в выпуске ASP.NET MVC 2.0. Существует проблема с объектом FormCollection при использовании с UpdateModel / TryUpdateModel выдает исключение. См. ASP.NET MVC 2 проблема с UpdateModel

Я недавно пытался обновить свой проект, но решил пока придерживаться MVC 1.0 до окончательной первоначальной версии (которая должна иметь исправление).

...