在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?)客户端对抽象的模拟实现