我正在为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]);
当我尝试上面的代码时,我收到以下异常。
Property or indexer 'System.Collections.Specialized.NameObjectCollectionBase.KeysCollection.this[int]' cannot be assigned to -- it is read only
答案 0 :(得分:1)
你可以在这里阅读使用Moq来伪造它: http://o2platform.wordpress.com/2011/04/05/mocking-httpcontext-httprequest-and-httpresponse-for-unittests-using-moq/
答案 1 :(得分:1)
模拟HttpContext并不容易。您可以使用Typemock Isolator来设置上下文,但它不是免费的。另一个(更好的)方法是抽象HttpContext并实现你的控制台(test?)客户端对抽象的模拟实现