我目前正在为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。但是,此属性是只读的。
我也看不到任何可以重置此属性的方法(我希望终止,终结或其他可能的方法)。
答案 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...
}
}