如果可以构造 HttpContext 为什么要模拟它呢?

2024-01-04

我一直在 ASP.NET 中以某种方式伪造/模拟/存根 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 在一篇文章中使用 Reflection hack 构建了 HttpContext。
但似乎只是不需要。

Cheers,
德米特里。


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

HttpRequest.Files 在这方面并不孤单,事实上,您可能还有更多的东西can't使用当前的 HttpContext 实现进行测试can测试。这就是抽象真正派上用场的地方。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果可以构造 HttpContext 为什么要模拟它呢? 的相关文章

随机推荐