2

У меня есть проект mvc, и я хочу написать единичные тестовые методы для тестирования методов контроллера. Я не хочу просто проверять, возвращает ли контроллер правильный вид или нет, я хочу проверить объект модели, возвращаемый partViewResult. Ниже приведен метод контроллера. Это возвращает объект модели для представления, чтобы заполнить сетку. Я хочу проверить, возвращает ли он 10 записей в объекте модели внутри частичного просмотра.Как устранить исключение ссылочной ссылки, созданное HttpContext.Session (в методе контроллера) в проекте модульного тестирования C#?

public ActionResult productGrid (string pID = null) 
{ 
    List<product> listproductModel = new List<product>(); 
    List<productModel> listviewproductModel = new List<productModel>(); 
    try { 
    listproductModel = GetProductDetails(string.IsNullOrEmpty(pId) ? 0 : Convert.ToInt32(pId)); 
    if (listproductModel != null) 
      { 
       Mapper.Map(listproductModel, listViewproductModel); // Using Auto mapper to map 
      } 
    HttpContext.Session["ProductList"] = listViewproductModel; 
     } 
     catch (Exception ex) 
     { 
      this.WriteLog(LogType.ERROR, ex.Message, ex); 
      throw ex; 
     } 
     return PartialView("_productGrid", listViewproductModel); 
    } 

Ниже приведен метод модульного тестирования (я новичок в этом, так что может быть много ошибок). Я немного изменил свой тестовый метод. он может проверять количество записей в объекте модели, возвращаемых методом контроллера, на просмотр, но возникает другая ошибка. Пожалуйста, ознакомьтесь со следующим кодом для получения более подробной информации.

public void productGridTest() 
    { 
     string platformId = null; 
     var obj = new ProductController(); 
     var result = obj.productGrid(platformId) as PartialViewResult; 
     Assert.AreEqual(true, ((IList<productModel>)result.ViewData.Model).Count == 10, "Error"); 
    } 

Где, productModel - это модельный объект, содержащий подробную информацию о продуктах.

выше TestMethod работает должным образом, когда я ставлю

HttpContext.Session["ProductList"] = listViewproductModel; 

в методе контроллера внутри КОММЕНТАРИЕВ (другими словами, отключить заявление). В противном случае он возвращает исключение ссылочной ссылки в силу этого утверждения. Пожалуйста, помогите мне, как решить эту ошибку! Спасибо! :)

+0

Можете ли вы подтвердить по строке 3, что вы имеете в виду 'PartialViewResult result = ...'? Кроме того, это фактический код, когда вы объявляете 'platformId', но передаете' pId'? Трудно помочь, если мы не посмотрим на фактический код! – Belogix

+0

Мне очень жаль. Да platformID должен быть pId. Мой плохой :( – Satwiki

+0

Спасибо. И пожалуйста, подтвердите точную строку, что ошибки, пожалуйста? – Belogix

ответ

0

Ваше имя контроллера - только «Контроллер»? Вам нужен контроллер, который вы хотите протестировать, а не общий. Например, если у меня есть Тест UserController:

var controller = new UserController() 
var result = controller.productGrid(""); 

Assert.IsNotNull(result); 

var viewResult = result as PartialViewResult; 
var hasErrors = controller.ModelState.Values.Any(d => d.Errors.Any()); 

Assert.IsFalse(hasErrors); 
Assert.IsInstanceOf<PartialViewResult>(result); 
Assert.IsNotNull(viewResult); 
Assert.AreEqual(true, result.ViewData.Count > 0); 
+0

Assert.IsInstanceOf (результат); не поддерживается в моей среде IDE. Я использую VS 2010 Professional. – Satwiki

+0

IsInstanceOf Является доказательством проверки NUnit. Вы можете установить его в проект yout или просто игнорировать это утверждение. Если вы не знаете NUnit, проверьте веб-сайт фреймворков: http://www.nunit.org/index.php?p=home –