asp.net - 如果可以构建,为什么要模拟 HttpContext?

标签 asp.net asp.net-mvc testing mocking httpcontext

我一直在 ASP.NET 中以某种方式伪造/模拟/ stub HttpContext(在 ASP.NET MVC/MonoRail 中更容易)。

但我可以看到 HttpContext 本身可以很容易地构建,只需几行代码即可。

var tw = new StringWriter();
var workerReq = new SimpleWorkerRequest("/webapp", @"c:\here\there\wwwroot", "page.aspx", tw);
var context = new HtpContext(workerReq);

如果我们将这段代码包装成类似这样的东西,它应该可以正常工作,而且我们甚至可以使用它来呈现 ASPX:

using(Simulate.HttpContext()) {
  HttpContext.Current.BlaBla;
}

所以问题是:

  1. 不应该这样做的原因。
  2. 应该这样做的原因。
  3. 为什么它没有被广泛使用(事实上我不记得有任何关于它的帖子)。

我记得 Phill Haack 使用反射技巧构建 HttpContext 的一篇帖子。
但似乎只是不需要。

干杯,
德米特里。

最佳答案

做非常简单的测试没问题,但是如何对使用 HttpRequest.Files 的组件进行单元测试?据我所知,没有公共(public) API 允许您在 SimpleWorkerRequest 上指定它。即使您可以找到可以设置 HttpFileCollection 属性的位置,请注意其构造函数是内部的,因此您甚至无法创建该类型的实例。

HttpRequest.Files 在这方面并不孤单,事实上,您无法使用当前 HttpContext 实现测试的东西可能比您可以测试的要多得多.这就是抽象真正派上用场的地方。

关于asp.net - 如果可以构建,为什么要模拟 HttpContext?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1686778/

相关文章:

c# - 读取 JavaScript 文件并通过 HttpHandler 将其输出回来

asp.net-mvc - 模型在 Post 上的 MVC3 中不保留值(value)

testing - 运行 munit 测试任务后 bamboo 作业失败

java - 用于测试的 Android Assets

.net - 如何使用 Nant 构建 .NET 网站

asp.net - SQL Server 2008 中的 ISNULL

c# - 如何将 Web API 以外的所有内容路由到/index.html

asp.net-mvc - 使用 IConfigurationBuilder.Build 时 Azure 给出 HTTP 500 错误

node.js - 使用 Vandium : Expected event type of apigateway but identified as unknown 时无服务器调用测试返回状态 500

c# - 无法引用外部 CSS