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;
            }
        }
    }

现在,我需要为这个 Handler 创建单元测试用例。我尝试过以下方法来做单元测试用例。

  • 对此句柄进行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 回答