如何在 C# 中对 HTTP 处理程序进行单元测试

How to Unit Test HTTP Handlers in C#

我想对我的 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 的可能测试用例是什么 因为 return 类型的处理程序是 Void 所以我很困惑如何编写测试处理程序...

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

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