HttpContext Ayarı.Mevcut.Bir birim test oturumu
Birim test için çalışıyorum bir web hizmeti var. Servisin bu kadar gibi: HttpContext çeşitli değerlere çeker
m_password = (string)HttpContext.Current.Session["CustomerId"];
m_userID = (string)HttpContext.Current.Session["CustomerUrl"];
birim testi kapsamında çalışan basit bir istek gibi kullanarak yaratıyorum:
SimpleWorkerRequest request = new SimpleWorkerRequest("", "", "", null, new StringWriter());
HttpContext context = new HttpContext(request);
HttpContext.Current = context;
HttpContext değerlerini ayarlamak için çalışıyorum ancak, her ne zaman.Mevcut.Oturum
HttpContext.Current.Session["CustomerId"] = "customer1";
HttpContext.Current.Session["CustomerUrl"] = "customer1Url";
HttpContext yazan null başvuru özel durumu anlıyorum.Mevcut.Oturum null. Birim test içinde geçerli oturumu başlatmak için herhangi bir yolu var mı?
CEVAP
"Sahte" bu gibi: yeni bir httpcontext oluşturarak
Bu kodu aldı ve statik yardımcı bir sınıf gibi koydum:
public static HttpContext FakeHttpContext()
{
var httpRequest = new HttpRequest("", "http://stackoverflow/", "");
var stringWriter = new StringWriter();
var httpResponse = new HttpResponse(stringWriter);
var httpContext = new HttpContext(httpRequest, httpResponse);
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 });
return httpContext;
}
ya da kullanmak HttpSessionState
yeni bir örneğini oluşturmak için yansıma yerine, sadece HttpContext
(Brent M. Büyü yorum başına) HttpSessionStateContainer
ekleyebilirsiniz:
SessionStateUtility.AddHttpSessionStateToContext(httpContext, sessionContainer);
ve sonra birim testleri de öyle diyebilirsiniz:
HttpContext.Current = MockHelper.FakeHttpContext();
ScalaTest ve Scala Görüşler birim test...
.NET Birim Test paketleri?...
'birim test korumalı için en iyi ...
'in Birim Test Runner ReSharper i...
Nasıl birim Temel Veri kullanıyorum şi...