在Console应用程序中人工填充HttpContext对象

我正在为log4net编写一个包装器库。 该库应该能够捕获上下文信息,如查询字符串,cookie,表单字段等。

我从Console应用程序调用此包装类而不是TDD类。

有没有办法在Console应用程序中填充HttpContext对象,如下所示?

HttpContext c = new HttpContext(null); c.Request.QueryString.Keys[1] = "city"; c.Request.QueryString[1] = "Los Angeles"; c.Request.QueryString.Keys[2] = "state"; c.Request.QueryString[2] = "CA"; 

然后按如下方式检索它?

 Console.WriteLine(context.Request.QueryString.Keys[1]); 

当我尝试上面的代码时,我收到以下exception。

 Property or indexer 'System.Collections.Specialized.NameObjectCollectionBase.KeysCollection.this[int]' cannot be assigned to -- it is read only 

你可以在这里阅读使用Moq来伪造它: http : //o2platform.wordpress.com/2011/04/05/mocking-httpcontext-httprequest-and-httpresponse-for-unittests-using-moq/

模拟HttpContext并不容易。 您可以使用Typemock Isolator来设置上下文,但它不是免费的。 另一个(更好的)方法是抽象HttpContext并实现你的控制台(test?)客户端对抽象的模拟实现