如何从HostingEnvironment中“取消托管”

时间:2019-04-08 10:43:25

标签: c# .net asp.net-mvc unit-testing

我目前正在为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。但是,此属性是只读的。

我也看不到任何可以重置此属性的方法(我希望终止,终结或其他可能的方法)。

1 个答案:

答案 0 :(得分:0)

听起来您的测试与使用同一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...
    }
}