4

当 Visual Studio 运行单元测试时,它会同时运行许多测试。这些运行时测试类的范围到底是什么。它们都是在不同的应用程序域中运行还是完全共享数据?

例如,如果我有以下测试类:

[TestClass]
public class FooTests
{
    Mock<ISomeInterface1> _complexMock1;
    Mock<ISomeInterface2> _complexMock2;

    public void CreateComplexMocks()
    {
        //set up _complexMock1 & _complexMock2
    }

    [TestMethod]
    public void Test1()
    {
        CreateComplexMocks();

        //use _complexMock1 & _complexMock2 in test
    }

    [TestMethod]
    public void Test2()
    {
        CreateComplexMocks();

        //use _complexMock1 & _complexMock2 in test
    }
}

测试利用CreateComplexMocks()助手来构建一些模拟。这些作为成员公开,而不是被传递回测试(在现实世界的例子中可能会有更多)

我的问题是,如果两个测试同时运行,它们会共享_complexMock1and的状态_complexMock2吗?

如果 complexMocks 是静态的呢?

4

2 回答 2

2

找到这个博客后,似乎每个测试都在不同的线程上实例化了一个单独的测试类。

所以实例成员不会被共享,但静态成员会。

于 2012-11-01T11:30:36.700 回答
1

在您的示例中,您应该在 [TestInitialize] 方法中创建模拟。
每次运行测试时,您的模拟都会再次创建。

[TestInitialize]
public void TestInit()
{
    CreateComplexMocks();
}
于 2012-11-01T11:20:28.877 回答