Как да разреша изключение за нулева препратка, хвърлено от HttpContext.Session (в метода на контролера) в проект за модулен тест C#?

Имам mvc проект и искам да напиша методи за тестване на единица, за да тествам методите на контролера. Не искам просто да тествам дали контролерът връща правилен изглед или не, искам да тествам моделния обект, върнат от partialViewResult. По-долу е методът на контролера. Това връща обект на модел към изглед за попълване на мрежата. Искам да тествам дали връща 10 записа в моделния обект в partialview.

 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 е моделен обект, съдържащ подробности за продуктите.

Горният тестов метод работи правилно, когато поставям

  HttpContext.Session["ProductList"] = listViewproductModel;

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


person Satwiki    schedule 16.07.2015    source източник
comment
Можете ли да потвърдите с ред 3, че имате предвид PartialViewResult result =...? Също така, това действителният код ли е, тъй като декларирате platformId, но предавате pId? Трудно е да помогнем, ако не гледаме действителния код!   -  person Belogix    schedule 16.07.2015
comment
Изключително съжалявам. Да, platformID трябва да бъде pId. Моя грешка :(   -  person Satwiki    schedule 16.07.2015
comment
Благодаря ти. И моля, потвърдете точния ред, че грешките моля?   -  person Belogix    schedule 16.07.2015
comment
PartialViewResult резултат = target.productGrid(pId) като PartialViewResult; - това е мястото, където възниква следната грешка: System.NullReferenceException: Препратката към обект не е зададена на екземпляр на обект.   -  person Satwiki    schedule 17.07.2015


Отговори (1)


Вашето име на контролера е само „контролер“? Трябва ви контролерът, който искате да тествате, а не генеричен. Например, ако имам 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);
person Striter Alfa    schedule 16.07.2015
comment
Assert.IsInstanceOf‹PartialViewResult›(резултат); не се поддържа в моята IDE. Използвам VS 2010 Professional. - person Satwiki; 17.07.2015
comment
IsInstanceOf е Assert на NUnit тестова рамка. Можете да го инсталирате във вашия проект или просто да игнорирате това твърдение. Ако не знаете NUnit, проверете уебсайта на рамките: nunit.org/index. php?p=начало - person Striter Alfa; 17.07.2015