0

ASP.NET ジェネリック ハンドラーのユニット テスト ケースを作成する必要があります。私のハンドラーコードは次のとおりです。

    public class MyHandler : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            context.Response.Write("Hello World");
            var data = context.Request.InputStream;
            //Here logic read the context.Request.InputStream
            //All the data will be posted to this Stream
            //Calling of business logic layer Methods
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }

次に、このハンドラのユニット テスト ケースを作成する必要があります。単体テストケースを実行するために、次の方法を試しました。

  • このハンドルHttpWebRequestに を作成し、すべてのデータを要求ストリームに書き込みます。HttpWebRequestすべてのハンドラーをテストする別のツールがあるため、これを続行したくありません
  • ビジネスメソッドの単体テストケースを作成していますが、これではハンドラーレベルで書かれたロジックをチェックできません。

HttpContext をモックしようとしましたが、これをモックすることはできません (HttpContent をモックすることは可能ですか?)。
私はこの方法を試しましたが、これにはハンドラーの変更も必要ですが、これを行うための準備がありません。

最後に私の質問は、ハンドラーを単体テストする方法は他にありますか?

前もって感謝します。

4

1 に答える 1

0

コンテキストをモックするためにできることは、HttpContextBaseを使用する追加のメソッドを作成し、インターフェイスメソッドからの呼び出しを転送することです。HttpContextBaseは、コンテキストをモックする可能性を与えるHttpContextWrapperを使用して呼び出すことができます

public void ProcessRequest(HttpContext context)
    {
       ProcessRequestBase(new HttpContextWrapper(context));
    }
    public void ProcessRequestBase(HttpContextBase ctx)
    {

    }

これは、ProcessRequestBaseメソッドを押すことでテストできます。ProcessRequestBaseが意図したとおりに機能すると想定する必要がありますが、それを回避するのは困難です。次に、このような呼び出しを使用してテストできます

HttpContextBase mock = new Mock<HttpContextBase>(); //or whatever syntax your mock framework uses
handler.ProcessRequest(mock.Object);
于 2012-09-24T08:14:51.153 に答える