如何解决单元测试项目 C# 中 HttpContext.Session(在 Controller 方法中)抛出的空引用异常?
How to resolve null reference exception thrown by HttpContext.Session (in Controller method) in unit test project C#?
我有一个 mvc 项目,我想编写单元测试方法来测试控制器方法。我不想简单地测试控制器是否返回正确的视图,我想测试 partialViewResult 返回的模型对象。
下面是控制器方法。这 returns 一个模型对象到一个视图来填充网格。我想测试它是否 returns 10 条记录在局部视图内的模型对象中。
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;
在 COMMENTS 内的控制器方法中(换句话说,禁用该语句)。否则,它 returns null reference exception 由于这条语句。请帮我解决这个错误!
谢谢! :)
你的控制器名字只有"Controller"?您需要要测试的控制器,而不是通用控制器。例如,如果我有一个要测试的 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);
我有一个 mvc 项目,我想编写单元测试方法来测试控制器方法。我不想简单地测试控制器是否返回正确的视图,我想测试 partialViewResult 返回的模型对象。 下面是控制器方法。这 returns 一个模型对象到一个视图来填充网格。我想测试它是否 returns 10 条记录在局部视图内的模型对象中。
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;
在 COMMENTS 内的控制器方法中(换句话说,禁用该语句)。否则,它 returns null reference exception 由于这条语句。请帮我解决这个错误! 谢谢! :)
你的控制器名字只有"Controller"?您需要要测试的控制器,而不是通用控制器。例如,如果我有一个要测试的 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);