繁体   English   中英

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM