Недавно я провел некоторый рефакторинг своего приложения mvc и понял, что возвращено много статических представлений. Вместо нескольких контроллеров с результатами действий, которые возвращают только представление, я решил создать один контроллер, который возвращает статические представления, если они существуют, и выдает ошибку 404, если представление не существует.
public ActionResult Index(string name)
{
ViewEngineResult result = ViewEngines.Engines.FindView(ControllerContext, name, null);
if (result.View == null)
ThrowNotFound("Page does not exists.");
return View(name);
}
Мой вопрос: как правильно это тестировать? Я попробовал следующий код, но я получаю сообщение об ошибке: «RouteData должен содержать элемент с именем« controller »с непустым строковым значением».
[Theory]
[InlineData("ContactUs")]
public void Index_should_return_view_if_view_exists(string name)
{
controller = new ContentController();
httpContext = controller.MockHttpContext("/", "~/Content/Index", "GET"); ;
var result = (ViewResult)controller.Index(name);
Assert.NotNull(result.View);
}
Мое намерение состояло в том, чтобы модульный тест вышел и получил реальное представление. Затем я начал задаваться вопросом, должен ли я издеваться над ViewEngines с помощью SetupGet для FindView и создавать два теста, где второй тест проверяет, что исключение не найдено, если представление является нулевым.
Как правильно проверить эту функциональность? Любые указатели, примеры кода или сообщения в блоге будут полезны.
Спасибо