MVC ViewResult.VIewName null даже после его установки
Я пытаюсь написать модульные тесты для приложения MVC. я пытаюсь проверить, если мой контроллер возвращает правильное имя представления.
Это действие контроллера, которое я тестирую:
public IActionResult Index(string reportcode)
{
if(string.IsNullOrEmpty(reportcode))
ReportCode = reportcode;
ViewBag.GridSource = GetReportData(reportcode);
return View("Index");
}
Это мой Unittest:
[Test]
public void Index_ReturnCorrectView()
{
var controller = new HomeController();
var result = controller.Index("COMD") as ViewResult;
Assert.AreEqual("Index", result.ViewName);
}
Ошибка, которую я получаю из модульного теста, ожидается "Индекс", но получил нулевое значение. Я провел большой поиск, и в большинстве ответов говорится, что свойство ViewName должно быть установлено после того, как вы объявите его при возврате представления. Я попробовал то же самое, но это не будет работать до сих пор.
Спасибо
1 ответ
Документация для Controller.View() гласит:
Эта перегрузка метода класса View возвращает объект ViewResult с пустым свойством ViewName. Если вы пишете модульные тесты для действий контроллера, учитывайте пустое свойство ViewName для модульных тестов, которые не принимают имя строкового представления.
Во время выполнения, если свойство ViewName пустое, вместо свойства ViewName используется имя текущего действия.
Поэтому, ожидая представления с тем же именем, что и текущее действие, мы можем просто проверить, что это пустая строка.
В качестве альтернативы метод Controller.View(ViewName, Model) устанавливает ViewName.
Мой метод контроллера
public ActionResult Index()
{
return View("Index");
}
Метод испытания
[TestMethod]
public void Index()
{
// Arrange
HomeController controller = new HomeController();
// Act
ViewResult result = controller.Index() as ViewResult;
// Assert
Assert.IsTrue(result.ViewName == "Index");
}