私には2つのアイデアがあります...1つはHttpResponseをモックすることで、もう1つは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