c# - 如何使用 Moq 模拟此代码以进行单元测试?
问题描述
我正在尝试为以下方法编写单元测试,但this
在参数this.Request.Body
和this.Request.Headers
. mock 的解决方案是_azureDevopsTask.PublishToHandler(this.Request.Body, this.Request.Headers)
什么?
我目前正在使用 Moq 框架编写单元测试。_azureDevopsTask
这里使用依赖注入的不同类的对象在哪里。
[HttpPost]
public IActionResult Execute()
{
try
{
_azureDevopsTask.PublishToHandler(this.Request.Body, this.Request.Headers);
return CreateSuccessResponse(true);
}
catch (Exception ex)
{
return CreateErrorResponse(ex.Message);
}
}
解决方案
实际上,您不需要 Moq 来模拟请求,您可以使用DefaultHttpContext
:
var httpContext = new DefaultHttpContext();
设置身体:
var stream = new MemoryStream(Encoding.UTF8.GetBytes("{example: value}"));
httpContext.Request.Body = stream;
httpContext.Request.ContentLength = stream.Length;
设置标题:
httpContext.Request.Headers["Content-Type"] = "application/json";
在 Controller 中设置 mock HttpContext:
var controller = new ExampleController()
{
ControllerContext = new ControllerContext()
{
HttpContext = httpContext,
}
};
推荐阅读
- javascript - java.time.对 JavaScript 日期的即时响应
- amazon-s3 - 如何在 Amazon EMR 上查看执行程序的输出?
- javascript - 如何在加载页面之前运行 jQuery 或者如何回调“getJson(function(data))”?
- python - 如何在全球范围内使用 python 和 docker?
- r-package - 无法加载共享对象“C:/Program Files/R/R-4.0.5/library/stats/libs/x64/stats.dll”
- jquery - onClick 功能在选中的单选按钮上不起作用
- google-cloud-platform - GCP API 网关的静态 IP
- python - 安装 Pysal:错误:无法卸载“llvmlite”。这是一个 distutils 安装的项目
- android - 如何保存 rss feed sqlite 数据 android?
- python - ensure_future() 似乎没有执行