Ищу руководство по модульному тестированию расширения контроллера, которое отображает частичное представление

Как сказано в заголовке, я ищу направление, как правильно протестировать расширение контроллера. Расширение отображает частичное представление, которое, в свою очередь, я использую в JSONResult:

 public static string RenderPartialViewToString(this Controller controller, string viewName = null, object model = null)
        {
            if (string.IsNullOrEmpty(viewName))
            {
                viewName = controller.ControllerContext.RouteData.GetRequiredString("action");
            }

            controller.ViewData.Model = model;

            using (StringWriter sw = new StringWriter())
            {
                ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName);
                ViewContext viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
                viewResult.View.Render(viewContext, sw);
                return sw.GetStringBuilder().ToString();
            }
        }

Пример использования:

public JsonResult Foo()
{
    var model = _repository.getSomeData();

    return Json(new { html = this.RenderPartialViewToString("Index", model) }, JsonRequestBehavior.AllowGet);
}

Я использую NUnit и помощник по тестированию MvcContrib , однако при настройке контроллера, который использует это расширение. Я столкнулся с NRE. Я предполагаю, что контекст контроллера настроен неправильно?

В конечном итоге тест запрещает ViewEngines.Engines.FindPartialView . Вот часть неудачного теста:

var routeData = new RouteData();
routeData.Values.Add("controller", "someName");
routeData.Values.Add("action", "someAction");

var builder = new TestControllerBuilder();
var controller = new ListingController(repository.Object);
builder.RouteData = routeData;
builder.InitializeController(controller);

var result = controller.Foo();

13
задан Jesse 14 January 2012 в 00:33
поделиться