Как мне имитировать контекст контроллера в моем модульном тесте, чтобы моя функция частичного представления строки работC#

Место общения программистов C#
Ответить
Anonymous
 Как мне имитировать контекст контроллера в моем модульном тесте, чтобы моя функция частичного представления строки работ

Сообщение Anonymous »

Я пытаюсь создать модульный тест для моего контроллера, но тестируемое действие использует функцию частичного представления строки, которая не хочет работать в моих тестах.

private string RenderPartialViewToString(string viewName, object model = null)
{
if (string.IsNullOrEmpty(viewName))
viewName = ControllerContext.RouteData.GetRequiredString("action");

ViewData.Model = model;

using (System.IO.StringWriter sw = new System.IO.StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);

return sw.GetStringBuilder().ToString();
}
}


Это дает мне ошибку «Ссылка на объект не установлена ​​на экземпляр объекта» в строке ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);

Моя настройка в модульном тесте для контроллера (для упрощения удалено несколько битов):

var mock = new Mock();
mock.SetupGet(p => p.HttpContext.User.Identity.Name).Returns(userName);
if (userName != null)
{
mock.SetupGet(p => p.HttpContext.Request.IsAuthenticated).Returns(true);
mock.SetupGet(p => p.HttpContext.User.Identity.IsAuthenticated).Returns(true);
}
else
{
mock.SetupGet(p => p.HttpContext.Request.IsAuthenticated).Returns(false);
}
var controller = new BlogController();
controller.ControllerContext = mock.Object;


Мне не удалось найти решение или обойти его. Любая помощь приветствуется. Спасибо.



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

var routeData = new RouteData();
routeData.Values.Add("controller", "BlogController");
mock.SetupGet(m => m.RouteData).Returns(routeData);


Подробнее здесь: https://stackoverflow.com/questions/232 ... ew-to-stri
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»