[英]Mocking HttpContext.Current.Application
我嘗試使用以下方法測試 Mock HttpContext.Current.Application第三個庫:
HttpContext.Current.Application.Add ( "key","value");
HttpContext.Current.Application.Get ("key");
我測試了很多模擬框架 Moq、RhinoMock、FakeSystemWeb、FakeHttpContext 但是在應用程序字典中添加值是不可能的,總是HttpContext.Current.Application.Count == 0
唯一有效的解決方案是使用 Microsoft.Fakes,但遺憾的是它僅適用於高級版和終極版,而我向其提供測試的開發人員僅使用專業版!!
使用 Microsoft.Fakes(它有效):
public MockHttpContext()
{
//MOCK System.Web
_shimsContext = ShimsContext.Create();
var httpRequest = new HttpRequest("", "http://www.monsite.com", "");
var httpContext = new HttpContext(httpRequest, new(HttpResponse(new(StringWriter()));
var applicationState = httpContext.Application;
System.Web.Fakes.ShimHttpContext.CurrentGet = () => httpContext;
System.Web.Fakes.ShimHttpContext.AllInstances.ApplicationGet = context => applicationState;
}
你有什么想法或如何分發我的測試 Microsoft.Fakes 或其他 Mocking 框架?
謝謝你。
模擬HttpContext
好框架是Typemock Isolator 。 你可以像下面的例子那樣做:
[TestMethod, Isolated]
public void TestMethod1()
{
var httpRequest = new HttpRequest("", "http://www.monsite.com", "");
var httpContext = new HttpContext(httpRequest, new HttpResponse(new StringWriter()));
var httpApp = httpContext.Application;
Isolate.Fake.AllInstances<HttpContext>();
Isolate.WhenCalled(() => HttpContext.Current).WillReturn(httpContext);
Isolate.WhenCalled(() => HttpContext.Current.Application).WillReturn(httpApp);
HttpContext.Current.Application.Add("key1", "value1");
HttpContext.Current.Application.Add("key2", "value2");
HttpContext.Current.Application.Add("key3", "value3");
Assert.AreEqual(3, HttpContext.Current.Application.Count);
Assert.AreEqual("value1", HttpContext.Current.Application.Get("key1"));
}
您應該始終在您的應用程序中使用 HttpContextBase、HttpRequestBase 和 HttpResponseBase 作為與無法測試的具體版本(沒有 typemock、Microsoft.Fakes 或其他一些魔法)相關聯。
只需使用 HttpContextWrapper 類進行轉換,如下所示。
var httpContextBase = new HttpContextWrapper(HttpContext.Current);
普里格可以。 您可以編寫代碼來模擬HttpContext
,如下所示:
public MockHttpContext()
{
//MOCK System.Web
_indirectionsContext = new IndirectionsContext();
var httpRequest = new HttpRequest("", "http://www.monsite.com", "");
var httpContext = new HttpContext(httpRequest, new HttpResponse(new StringWriter()));
var applicationState = httpContext.Application;
System.Web.Prig.PHttpContext.CurrentGet().Body = () => httpContext;
System.Web.Prig.PHttpContext.ApplicationGet().Body = context => applicationState;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.