Aspnetcore: Создание UrlHelper с помощью ActionContext () приводит к исключению NullReferenceException

Созданный на 15 янв. 2019  ·  3Комментарии  ·  Источник: dotnet/aspnetcore

Опишите ошибку

Попытка создать URLHelper для целей тестирования с помощью ActionContext () вызывает исключение NullReferenceException.

Воспроизводить

Шаги по воспроизведению поведения:

  1. Создайте пустое решение MVC core 2.2
  2. Создать тестовый проект xunit
  3. Установите NuGet Microsoft.AspNetCore.Mvc.Core 2.2.0.
  4. Напишите в тесте: var Url = new UrlHelper (new ActionContext ());
  5. Запустить тест

Ожидаемое поведение

Выдает сообщение: System.NullReferenceException: ссылка на объект не установлена ​​на экземпляр объекта.

Дополнительный контекст

Отчет об ошибке также можно найти на StackOverflow:
https://stackoverflow.com/questions/54199103/trying-to-test-a-controller-with-a-urlhelper

bug

By Design area-mvc

Все 3 Комментарий

Здесь происходит то, что UrlHelper пытается получить доступ к свойству RouteData свойства ActionContext чтобы проверить, есть ли в нем значения, что вызывает исключение. Чтобы исправить это, вы можете:

var url = new UrlHelper( new ActionContext{ RouteData = new RouteData() } );

Этот конкретный конструктор задокументирован для использования для модульного тестирования, в частности, когда ActionContext просто нужно передать, но не использовать в коде-потребителе. Можно было бы @navelDirt .

Идя дальше, если вы намерены провести модульное тестирование, если фрагмент кода создает определенный URL-адрес, вы добьетесь большего успеха, используя заглушку \ mock IUrlHelper . Если вам нужно проверить фактический результат, я настоятельно рекомендую написать интеграционный тест.

Большое спасибо @navelDirt и @pranavkm.
Я был сбит с толку, так как в ядре 1.1 он работал без установки RouteData, но при переходе на 2.2 произошел сбой. Вот почему я подумал, что это ошибка ... извините за неудобства.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги