运行单元测试时测试类的范围是什么?

时间:2012-11-01 10:56:13

标签: c# visual-studio unit-testing scope mstest

当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()助手构建一些模拟。这些是作为成员公开而不是被传递回测试(在现实世界的例子中可能会有更多)

我的问题是,如果两个测试同时运行,他们会分享_complexMock1_complexMock2的状态吗?

如果complexMocks是静态的怎么办?

2 个答案:

答案 0 :(得分:2)

找到this blog之后,似乎在不同的线程上为每个测试实例化了一个单独的测试类。

因此不会共享实例成员,但静态成员将会共享。

答案 1 :(得分:1)

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

[TestInitialize]
public void TestInit()
{
    CreateComplexMocks();
}