Here एक संबंधित चर्चा है।
मैंने सीधे HttpContext.Current
का संदर्भ देना बंद कर दिया। और इस वर्ग के बजाय का उपयोग करें:
public class HttpContextFactory
{
private static HttpContextBase m_context;
public static HttpContextBase Current
{
get
{
if (m_context != null)
return m_context;
if (HttpContext.Current == null)
throw new InvalidOperationException("HttpContext not available");
return new HttpContextWrapper(HttpContext.Current);
}
}
public static void SetCurrentContext(HttpContextBase context)
{
m_context = context;
}
}
और हमारे कोड में HttpContextFactory.Current
बजाय HttpContext.Current
का उपयोग करें।
तो फिर आप अपने परीक्षण में यह लिख:
HttpContextFactory.SetCurrentContext(GetMockedHttpContext());
जहां GetMockedHttpContext() here से है और इस तरह दिखता है:
private System.Web.HttpContextBase GetMockedHttpContext()
{
var context = new Mock<HttpContextBase>();
var request = new Mock<HttpRequestBase>();
var response = new Mock<HttpResponseBase>();
var session = new Mock<HttpSessionStateBase>();
var server = new Mock<HttpServerUtilityBase>();
var user = new Mock<IPrincipal>();
var identity = new Mock<IIdentity>();
context.Setup(ctx => ctx.Request).Returns(request.Object);
context.Setup(ctx => ctx.Response).Returns(response.Object);
context.Setup(ctx => ctx.Session).Returns(session.Object);
context.Setup(ctx => ctx.Server).Returns(server.Object);
context.Setup(ctx => ctx.User).Returns(user.Object);
user.Setup(x => x.Identity).Returns(identity.Object);
identity.Setup(id => id.IsAuthenticated).Returns(true);
identity.Setup(id => id.Name).Returns("test");
return context.Object;
}
यह एक mocking frameworkmoq
कहा जाता है का उपयोग करता है अपने परीक्षण परियोजना आपको System.Web
और System.Web.Abstractions
का संदर्भ जोड़ना है, जहां HttpContextBase
परिभाषित किया गया है।
मैंने यह भी करना शुरू कर दिया है (HttpContext को HttpContextFactory के साथ बदलना), और यह वास्तव में यूनिट परीक्षण के साथ मदद करता है (मैंने इस क्षमताओं को एक एपीआई में लपेट लिया है जिसे आप यहां देख सकते हैं http://o2platform.wordpress.com/2011/ 04/05/मॉकिंग-httpcontext-httprequest-and-httpresponse-for-unittests-use-moq /) –
मैं moq का उपयोग नहीं कर रहा हूं, इसलिए यह मुझे 100% तक नहीं मिला, लेकिन यह सहायक था। मैंने सहायता के लिए स्टीफन वाल्थर की नकली वस्तुओं को देखा: http://stephenwalther.com/archive/2008/07/01/asp-net-mvc-tip-12-faking-the-controller-context.aspx –