本质上,我的目标是修改流。不确定这是否可能?有什么想法吗?
发布于 2013-09-25 05:28:13
我正在寻找一种方法来覆盖HttpWebResponse类的GetResponseStream方法,以便有一个自定义的流返回。
凉爽的。当然,您必须以这样一种方式设计代码,这样您就不会使用HttpWebResponse类的具体实现,这种情况很少发生。这就是紧耦合。我的意思是,不要再用HttpWebRequests来思考了。这就是无论如何都会拯救你的东西,这也会削弱你的代码不同层之间的耦合性,并使它成为单元可测试的。
这个答案的要点是,您的代码应该以这样的方式设计,以便它不依赖于任何HttpWebRequest具体类。您应该开始考虑如何将其隐藏在可以在单元测试中轻松模拟的接口抽象之后。
一旦您在接口后面抽象了您的web服务调用,您就可以很容易地在单元测试中模拟此调用,以测试系统的实际行为,而不需要依赖于测试中的特定类。
发布于 2013-09-25 05:31:45
你不能轻易地重写HttpWebResponse的行为,要么你把web服务API包装在客户端,就像@Jon在评论中建议的那样,或者,如果你真的想变得更有冒险精神,那就改变请求,把它指向一个代理服务器,它会根据需要修改流。
不过,这不会是一件微不足道的事情。
发布于 2013-09-25 05:35:50
假设您可以修改调用GetResponseStream的代码,那么适配器模式可能是一个不错的选择。
流:流{ MyCustomStream originalStream;
MyCustomStream(Stream originalStream)
{ this.originalStream = originalStream; }
override int Read(byte [] buffer, int offset, int count)
{
byte [] temp = new byte[count];
var ret = originalStream.Read(temp, offset, count);
// modify your buffer if desired
Array.Copy(buffer, temp);
return ret;
}
// implement all the other abstract methods of Stream and just call originalStream }
//现在像这样替换代码....
Request.GetResponseStream myStream = var ();
//使用....
var myStream =新的MyCustomStream(request.GetResponseStream());
https://stackoverflow.com/questions/18992332
复制相似问题