c# - 如何在 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 的可能测试用例是什么
解决方案
测试 void 方法是一个有趣的话题。我要做的主要方法是模拟一个 HTTP 上下文,并将其作为参数传递。然后,您应该断言您正在设置 HTTP 上下文以在您的方法中执行的操作。例如Assert.Equal("text/plain", myHttpContext.Response.ContentType);
但是,您需要确保您正在创建一个单元测试。它说在这一步之后你有业务逻辑。你有没有倒置你的依赖关系?(将它们作为参数传递给方法)。你能适当地模拟事情吗?确保该方法没有执行实际的 HTTP 调用(如果它是单元测试)。一般来说,我建议使用较少的带有副作用的无效方法,但在传统中它是无法避免的。为了解决您最初的问题,测试用例将是您在逻辑上期望的任何东西。我是否正确设置了路线?我期望内容是文本吗?我的有效载荷准确吗?您更改的任何内容都是潜在的测试,但请确保您正在测试验收标准。如果测试中有一个逻辑断言,则可以在测试中拥有多个断言。
推荐阅读
- mysql - 来自 wamp 的备份文件显示表,但错误提示表不存在
- javascript - 无法在 Angular 2 中访问子服务的成员
- sonarqube - SonarQube 未检测到已删除的问题
- rust - 如何构建超 HTTP 应用程序来处理共享状态?
- php - 保护动态 where 子句 (PDO)
- python - WxPython GLCavans 不能在某些机器上工作
- r - 重新平衡具有给定权重的投资组合
- c# - 返回任务
> 从没有等待的 EF Core 查询? - java - 如何使用来自其他项目的模块的 Maven 配置文件
- php - 5.6 和 7.0 中 htmlentities 的 PHP 问题