UX Control Framework, который я использую, требует метода расширения на контроллерах MVC.Ссылка на нулевой объект генерируется, когда nUnit пытается вызвать этот метод (используется для упаковки частичного представления в Json).
Автор инфраструктуры предложил вызывать этот метод через интерфейс, однако это просто откладываетnull error.
Есть ли способ протестировать ActionResult из контроллера, использующего метод расширения?
Метод Controller Create () возвращает результирующий фрагмент из метода расширения:
return Json(new { Content = viewRender.RenderPartialView(this, "ListItems/SimpleSyllabi", new[] { nS }) });
Подпись метода расширения
public static string RenderPartialView(this Controller controller, string viewName, object model = null, bool removeWhiteSpace = true);
Ошибка проста:
System.NullReferenceException: 'Object reference not set to an instance of an object.'
Результат StackTrace:
at System.Web.Mvc.VirtualPathProviderViewEngine.FindPartialView(ControllerContext controllerContext, String partialViewName, Boolean useCache)
at System.Web.Mvc.ViewEngineCollection.<>c__DisplayClass2.<FindPartialView>b__0(IViewEngine e)
at System.Web.Mvc.ViewEngineCollection.Find(Func`2 lookup, Boolean trackSearchedPaths)
at System.Web.Mvc.ViewEngineCollection.FindPartialView(ControllerContext controllerContext, String partialViewName)
at Omu.AwesomeMvc.ControllerExtensions.RenderView(Controller controller, String viewName, Object model, String master, Boolean partial, Boolean removeWhiteSpace)
at Omu.AwesomeMvc.ControllerExtensions.RenderPartialView(Controller controller, String viewName, Object model, Boolean removeWhiteSpace)
at Flipprs.nUnitHelpers.Awesome.ViewRender.RenderPartialView(Controller controller, String viewName, Object model, Boolean removeWhiteSpace) in A:\Stephan\Source\Workspaces\AchievementCards\Develop-Payment(v0.0.11.0)\Flipprs.Web\Helpers\Awesome\nUnitHelpers.cs:line 17
at Flipprs.Controllers.SyllabusAjaxListController.Create(SyllabusCreateViewModel scvm) in A:\Stephan\Source\Workspaces\AchievementCards\Develop-Payment(v0.0.11.0)\Flipprs.Web\Controllers\SyllabusAjaxListController.cs:line 217
at Flipprs.Tests.Controllers.SyllabusAjaxListControllerTest.SyllabusAjaxListController_CreatePUT_ReturnsJson(String HTTPreqAUEmail) in A:\Stephan\Source\Workspaces\AchievementCards\Develop-Payment(v0.0.11.0)\Flipprs.Tests\Controllers\SyllabusAjaxListControllerTest.cs:line 484
Result Message: System.NullReferenceException : Object reference not set to an instance of an object.
Тест интеграции 'Настройка ':
private IViewRender viewRender;
viewRender = new ViewRender();
controller = new SyllabusAjaxListController(viewRender, photoPlaceholderService, activityService, syllabusService,
userService, organisationService, userManager);
Затем в тесте (выдержки)
[Test, Sequential]
public void SyllabusAjaxListController_CreatePUT_ReturnsJson()
{
ActionResult result_ar = controller.Create(validModel);
JsonResult result = result_ar as JsonResult;
}
Интеграционные тестовые макеты
Mock<ControllerContext> controllerContext;
Mock<HttpContext> httpContext;
Mock<HttpContextBase> contextBase;
Mock<HttpRequestBase> httpRequest;
Mock<HttpResponseBase> httpResponse;
Mock<IIdentity> identity;
Mock<IPrincipal> principal;
Mock<GenericPrincipal> genericPrincipal;