bet*_*run 5 asp.net httpresponse nmock
我有以下方法在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;
}
Run Code Online (Sandbox Code Playgroud)
为了测试它,我需要恢复处理过的流.有没有办法从httpResponse对象读取流?
我有两个想法...一个是模拟 HttpResponse,另一个是模拟 Web 服务器。
1. 模拟HttpResponse
我在知道你使用哪个模拟框架之前就写了这篇文章。以下是如何使用 TypeMock 测试您的方法。
这假设您将 httpResponse 变量传递给该方法,并按如下方式更改该方法:
public void ShowPDF(Stream stream, HttpResponse httpResponse)
Run Code Online (Sandbox Code Playgroud)
当然,如果它是 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();
}
}
Run Code Online (Sandbox Code Playgroud)
2. 模拟Web服务器
也许您可以通过模拟 Web 服务器来做到这一点。这听起来可能很疯狂,但看起来并没有那么多代码。这里有一些关于在 IIS 之外运行 Web 窗体的链接。
我可以运行 ASPX 并 grep 结果而不发出 HTTP 请求吗?
http://msdn.microsoft.com/en-us/magazine/cc163879.aspx
| 归档时间: |
|
| 查看次数: |
2066 次 |
| 最近记录: |