MSTest:为什么在测试方法完成后HttpContext.Current变为null?

时间:2015-11-04 15:04:10

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

我正在使用MSTest为ASP.NET项目编写一系列单元测试。一些正在测试的代码假定HttpContext.Current不为空,所以我正在设置一个虚拟HttpContext.Current以避免在测试运行时抛出NullReferenceException

因为在我的情况下,HttpContext.Current的实际内容并不重要 - 它只需要非空 - 我最初的方法是在我的测试中只设置一次虚拟HttpContext.Current class的AssemblyInitialize方法,让所有测试方法都使用它。

这适用于单一测试方法。但是,在每个测试方法完成后,我发现HttpContext.Current将变为空,第二次和后续测试将因此失败。

这是一个简化的完整测试类,用于说明此行为:

using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Web;
using System.IO;

[TestClass]
public class UnitTest1
{
    [AssemblyInitialize]
    public static void RunOnceBeforeTestsBegin(TestContext context)
    {
        // Set up a dummy HttpContext.Current for testing
        HttpRequest request = new HttpRequest("", "http://example.com/", "");
        HttpResponse response = new HttpResponse(new StringWriter());
        HttpContext.Current = new HttpContext(request, response);
    }

    [TestMethod]
    public void TestMethod1()
    {
        Assert.IsNotNull(HttpContext.Current);
    }

    [TestMethod]
    public void TestMethod2()
    {
        Assert.IsNotNull(HttpContext.Current);
    }
}

在我的Visual Studio 2013中,当我在这个类中运行测试时:

  • TestMethod2首先运行并通过;
  • TestMethod1第二次运行,因为HttpContext.Current为空而失败。

(我知道我可以通过为每个单独的测试方法设置一次假HttpContext.Current来解决此问题,例如在TestInitialize方法中。)

我的问题:为什么HttpContext.Current在每个测试方法运行后都变为空?

0 个答案:

没有答案