Попытка создать URLHelper для целей тестирования с помощью ActionContext () вызывает исключение NullReferenceException.
Шаги по воспроизведению поведения:
Выдает сообщение: System.NullReferenceException: ссылка на объект не установлена на экземпляр объекта.
Отчет об ошибке также можно найти на StackOverflow:
https://stackoverflow.com/questions/54199103/trying-to-test-a-controller-with-a-urlhelper
Здесь происходит то, что UrlHelper
пытается получить доступ к свойству RouteData
свойства ActionContext
чтобы проверить, есть ли в нем значения, что вызывает исключение. Чтобы исправить это, вы можете:
var url = new UrlHelper( new ActionContext{ RouteData = new RouteData() } );
Этот конкретный конструктор задокументирован для использования для модульного тестирования, в частности, когда ActionContext
просто нужно передать, но не использовать в коде-потребителе. Можно было бы @navelDirt .
Идя дальше, если вы намерены провести модульное тестирование, если фрагмент кода создает определенный URL-адрес, вы добьетесь большего успеха, используя заглушку \ mock IUrlHelper
. Если вам нужно проверить фактический результат, я настоятельно рекомендую написать интеграционный тест.
Большое спасибо @navelDirt и @pranavkm.
Я был сбит с толку, так как в ядре 1.1 он работал без установки RouteData, но при переходе на 2.2 произошел сбой. Вот почему я подумал, что это ошибка ... извините за неудобства.