c#如何获取httpResponse.BinaryWrite处理的流



我有以下方法在HttpResponse对象中写入流。

public HttpResponse ShowPDF(Stream stream)
{
MemoryStream memoryStream = (MemoryStream) stream;
httpResponse.Clear();
httpResponse.Buffer = true;
httpResponse.ContentType = "application/pdf";
httpResponse.BinaryWrite(memoryStream.ToArray());
httpResponse.End();
return httpResponse;
}

为了测试它,我需要恢复处理后的流。有没有办法从httpResponse对象读取流?

我有两个想法。。。一个模拟HttpResponse,另一个模拟web服务器。

1.模拟HttpResponse

我写这篇文章之前,我知道你使用了哪个嘲讽的框架。以下是如何使用TypeMock测试您的方法。

这假设您将httpResponse变量传递给该方法,并按如下方式更改该方法:

public void ShowPDF(Stream stream, HttpResponse httpResponse)

当然,如果它是Page类的成员,您可以将其更改为将其传递给Page对象上的属性。

下面是一个如何使用假HttpResponse:进行测试的例子

internal void TestPDF()
{
FileStream fileStream = new FileStream("C:\deleteme\The Mischievous Nerd's Guide to World Domination.pdf", FileMode.Open);
MemoryStream memoryStream = new MemoryStream();
try
{
memoryStream.SetLength(fileStream.Length);
fileStream.Read(memoryStream.GetBuffer(), 0, (int)fileStream.Length);
memoryStream.Flush();
fileStream.Close();
byte[] buffer = null;
var fakeHttpResponse = Isolate.Fake.Instance<HttpResponse>(Members.ReturnRecursiveFakes);
Isolate.WhenCalled(() => fakeHttpResponse.BinaryWrite(null)).DoInstead((context) => { buffer = (byte[])context.Parameters[0]; });
ShowPDF(memoryStream, fakeHttpResponse);
if (buffer == null)
throw new Exception("It didn't write!");
}
finally
{
memoryStream.Close();
}        
}

2.模拟Web服务器

也许您可以通过模拟web服务器来实现这一点。这听起来可能很疯狂,但看起来并没有那么多代码。这里有几个关于在IIS之外运行Web窗体的链接。

我可以在不发出HTTP请求的情况下运行ASPX并对结果进行grep吗?

http://msdn.microsoft.com/en-us/magazine/cc163879.aspx

相关内容

最新更新