c# - 如何从 HostingEnvironment 中“取消托管”
问题描述
我目前正在为 ASP Net MVC 应用程序编写单元测试,我必须模拟的一件事是 HTTP 请求。为此,我使用 HttpSimulator 库(Subtext.TestLibrary)。
我调用 SimulateRequest() 方法,它所做的一件事就是创建一个 HostingEnvironment 对象。
_httpSimulator = new HttpSimulator().SimulateRequest(new Uri());
在模拟 HTTP 请求之前,我必须在我的代码中使用 HostingEnvironment.IsHosted 属性的值(在条件语句中)。
第一次测试一切正常,因为我得到了 HostingEnvironment.IsHosted 的正确值(这是 FALSE)。
但是,当 SimulateRequest() 创建 HostingEnvironment 对象时,HostingEnvironment.IsHosted 变为 TRUE,因此当第二次测试运行时,我收到一个 TRUE 值,这会导致错误的结果(或异常)。
HostingEnvironment environment = new HostingEnvironment();
因此,我试图找到一种方法将 HostingEnvironment.IsHosted 重置为 FALSE。但是,此属性是只读的。
我也看不到任何会重置此属性的方法(我希望 Terminate、Finalize 或其他任何可能的方法)。
解决方案
听起来您的测试与使用同一 HostingEnvironment() 实例的多个测试过于紧密地耦合在一起。
每个测试通常应该相互独立地执行,以便例如测试 1 的结果不会对例如测试 2 的结果产生任何影响。
只需使用单独的实例HostingEnvironment()
:
[Test]
public void InitializeContext()
{
using (HttpSimulator simulator = new HttpSimulator())
{
//Test #1...
}
}
[Test]
public void Simulator_Assigns_CurrentContext()
{
using (HttpSimulator simulator = new HttpSimulator())
{
//Test #2...
}
}
推荐阅读
- python - Scikit-Learn:更改训练模型的列以使用 ColumnTransformer 和 GridSearchCV 进行预测
- flutter - 如何在我的颤振应用程序中保持用户的登录会话打开?
- python - CalledProcessError: Command ... 返回非零退出状态 1
- flutter - Flutter 和 InAppWebView 如何获取高度?
- c++ - 使用移动常量参考的可能性
- python - Python:re.sub 跳过多次连续出现相同模式的所有其他匹配项
- azure - 使用 Dask 从带有 SAS 令牌的 Azure Data Lake Gen2 加载数据
- javascript - 扩展ckeditor表插件
- ios - MKPointAnnotation 标题未显示且注释不可拖动
- character-encoding - Azure 数据工厂编码有急性字符的问题。例如:ú、á、é