首页 > 解决方案 > 如何在 C# 中对 HTTP 处理程序进行单元测试

问题描述

我想对我的 HTTP 处理程序进行单元测试。我正在使用 XUnit 框架进行单元测试,我的示例处理程序代码是

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

我是单元测试的新手,我只想知道测试我的 HandleS 的可能测试用例是什么因为处理程序的返回类型是 Void 所以我很困惑如何编写处理程序的测试......

注意:我知道可以使用 HttpContextWrapper 调用 HttpContextBase,我不是在问这个,我只是在问 HttpHandlers 的可能测试用例是什么

标签: c#asp.netnunitmoqxunit

解决方案


测试 void 方法是一个有趣的话题。我要做的主要方法是模拟一个 HTTP 上下文,并将其作为参数传递。然后,您应该断言您正在设置 HTTP 上下文以在您的方法中执行的操作。例如Assert.Equal("text/plain", myHttpContext.Response.ContentType);但是,您需要确保您正在创建一个单元测试。它说在这一步之后你有业务逻辑。你有没有倒置你的依赖关系?(将它们作为参数传递给方法)。你能适当地模拟事情吗?确保该方法没有执行实际的 HTTP 调用(如果它是单元测试)。一般来说,我建议使用较少的带有副作用的无效方法,但在传统中它是无法避免的。为了解决您最初的问题,测试用例将是您在逻辑上期望的任何东西。我是否正确设置了路线?我期望内容是文本吗?我的有效载荷准确吗?您更改的任何内容都是潜在的测试,但请确保您正在测试验收标准。如果测试中有一个逻辑断言,则可以在测试中拥有多个断言。


推荐阅读