c# - 如何解决单元测试项目 C# 中 HttpContext.Session(在 Controller 方法中)抛出的空引用异常?

标签 c# asp.net-mvc unit-testing controller asp.net-mvc-partialview

我有一个 mvc 项目,我想编写单元测试方法来测试 Controller 方法。我不想简单地测试 Controller 是否返回正确的 View ,我想测试 partialViewResult 返回的模型对象。 下面是 Controller 方法。这会将模型对象返回到 View 以填充网格。我想测试它是否在局部 View 内的模型对象中返回 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);
    }

下面是单元测试方法(我是新手所以可能有很多错误)。我稍微改变了我的测试方法。它能够检查 Controller 方法返回给 View 的模型对象中的记录数,但发生了另一个错误。详情请查看以下代码。

  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 内的 Controller 方法中(换句话说,禁用该语句)。否则,返回空引用异常。请帮我解决这个错误! 谢谢! :)

最佳答案

您的 Controller 名称只是“Controller”?您需要要测试的 Controller ,而不是通用 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);

关于c# - 如何解决单元测试项目 C# 中 HttpContext.Session(在 Controller 方法中)抛出的空引用异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31449023/

相关文章:

c# - 在ForEach语句中使用linq

asp.net-mvc - MVC模型要求为true

asp.net-mvc - 使用 ToExpando 方法的问题

asp.net-mvc - ASP.NET MVC 从 URL 获取路由值

javascript - 监视模拟服务人员(msw)?

asp.net-mvc - 带 Moq 的单元测试存储库

django 测试 - 如何获取响应数据以备将来使用

c# - .NET 4 相当于 Task.WhenAll()

c# - 如何将信息从一个类传递到另一个类

c# - 为什么释放鼠标按钮时绘制的线会消失?