Model у ActionResult равно Null

Пишу тесты для контроллеров на NUnit. Платформа .NetFramework 4.7.2. Возникла проблема, что ActionResult не возвращает передаваемую модель. А точнее возвращает её равной null. Отсюда и ошибка:

System.NullReferenceException : Ссылка на объект не указывает на экземпляр объекта.

Код теста

[Test]
[TestCase("", "", "", false, TestName = "Empty Params")]
[TestCase("", "", "", true, TestName = "Archive")]
[TestCase("", "5", "", false, TestName = "Have Filial")]
[TestCase("", "-", "", false, TestName = "Have Bad Filial")]
[TestCase("", "", "1", false, TestName = "Have Reserv Level")]
[TestCase("", "", "-", false, TestName = "Have Bad Reserv Level")]
[TestCase("1", "", "", false, TestName = "Have Code")]
[TestCase("*", "", "", false, TestName = "Have Bad Code")]
public void SearchResultTest1(string code, string idFilial, string idReservLevel, bool isArchived)
{
    var result = controller.SearchResult("", "", "", isArchived) as ViewResult;
    var data = context.Testables
        .Include(f => f.TestableFilial) 
        .Include(f => f.TestableReservLevel)
        .Where(t => t.isArchived == isArchived);

    if (code != "") data = data.Where(t => t.TestableCode.Contains(code));
    if (idFilial != "") 
    {
        int int_idFilial = Convert.ToInt32(idFilial);
        data = data.Where(t => t.TestableFilial.FilialId == int_idFilial); 
    }
    if (idReservLevel != "")
    {
        int int_idReservLevel = Convert.ToInt32(idReservLevel);
        data = data.Where(t => t.TestableReservLevel.ReservLevelId == int_idReservLevel);
    }

    int count = data.ToArray().Length;
    Assert.IsInstanceOf<List<Testables>>(result.ViewData.Model);
    Assert.AreEqual(count, (result.ViewData.Model as List<Testables>).Count);
}

Код ActionResult:

/// <summary>
/// Результаты поика тестируемых
/// </summary>
/// <param name="testableCode">Код тестируемого</param>
/// <param name="filialId">ИД филиала тестируемого</param>
/// <param name="reservLevelId">ИД уровня резерва тестируемого</param>
/// <param name="isArchived">Аккаунт тестируемого в архиве</param>
/// <returns>List<Testables></returns>
[HttpPost]
public ActionResult SearchResult(string testableCode,
                                 string filialId,
                                 string reservLevelId,
                                 bool isArchived = false)
{
    var tList = db.Testables//All testables eager loading
        .Include(f => f.TestableFilial)
        .Include(rl => rl.TestableReservLevel);
    if (testableCode != null && testableCode != "")//Sort by code field
        tList = tList.Where(t => t.TestableCode.Contains(testableCode));
    if (filialId != null && filialId != "")//Sort by filial field
    {
        int FilialId = Convert.ToInt32(filialId);
        tList = tList.Where(t => t.TestableFilial.FilialId == FilialId);
    }
    if (reservLevelId != null && reservLevelId != "")//Sort by reservLevel field
    {
        int ReservLevelId = Convert.ToInt32(reservLevelId);
        tList = tList.Where(t => t.TestableReservLevel.ReservLevelId == ReservLevelId);
    }
    List<Testables> model = tList.Where(t => t.isArchived == isArchived).ToList();//Sort by archived
    return PartialView(model);
}

Скрин ошибки Скрин ошибки

Строка 62 - эта:

Assert.IsInstanceOf<List<Testables>>(result.ViewData.Model);


Ответы (1 шт):

Автор решения: Johannes Krauser III

Как и сказал @aepot , необходимо было поставить приведение к типу в скобках перед вызовом метода контроллера

var result = (ViewResult)controller.SearchResult("", "", "", isArchived);

Тогда у меня вывалилось исключение InvalidCastException. Не удалось привести тип PartialViewResult к ViewResult. Тогда оставалось поменять тип и всё заработало.

var result = (PartialViewResult)controller.SearchResult("", "", "", isArchived);
→ Ссылка