Asp.net mvc 在MVC单元测试中填充HTTPContext.Item
在MVC控制器的一个函数中,我们有以下几行代码Asp.net mvc 在MVC单元测试中填充HTTPContext.Item,asp.net-mvc,mocking,httpcontext,Asp.net Mvc,Mocking,Httpcontext,在MVC控制器的一个函数中,我们有以下几行代码 public ActionResult EditEmp(int eId = 0) { EPermission ePermission = (EPermission)HttpContext.Items["empPermission"]; } 在我的单元测试中,我调用此控制器进行测试 public void TestMethod1() { var result = eController.EditEmp(10) as ViewResu
public ActionResult EditEmp(int eId = 0)
{
EPermission ePermission = (EPermission)HttpContext.Items["empPermission"];
}
在我的单元测试中,我调用此控制器进行测试
public void TestMethod1()
{
var result = eController.EditEmp(10) as ViewResult;
}
我的测试用例失败,因为在运行时,HttpContext
中没有empPermission
的值
我们想知道如何用一个值填充
HttpContext.Items
,以便它可以在运行时拾取。我们已经在mock中查找了一些示例,但到目前为止还没有找到任何运气。您需要模拟HttpContext。下面是在调用控制器方法之前应在单元测试(最好在TestInitialize上)中运行的代码示例:
var httpRequest = new HttpRequest("", "http://mySomething/", "");
var stringWriter = new StringWriter();
var httpResponce = new HttpResponse(stringWriter);
var httpContext = new HttpContext(httpRequest, httpResponce);
var sessionContainer = new HttpSessionStateContainer("id", new SessionStateItemCollection(),
new HttpStaticObjectsCollection(), 10, true,
HttpCookieMode.AutoDetect,
SessionStateMode.InProc, false);
httpContext.Items["AspSession"] = typeof(HttpSessionState).GetConstructor(
BindingFlags.NonPublic | BindingFlags.Instance,
null, CallingConventions.Standard,
new[] { typeof(HttpSessionStateContainer) },
null)
.Invoke(new object[] { sessionContainer });
HttpContext.Current = httpContext;
HttpContext.Current.User = new GenericPrincipal(
new GenericIdentity("WSUSER"),
new string[0]
可能重复的此问题不完整,无法编译。提供一个可用于重现问题的。也许那时可以提供更好的帮助。可能的副本