2012-11-01 194 views
3

当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

在发现this blog,它会出现一个单独的测试类实例的每一个测试,在不同的线程。

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

0

在你的例子中,你应该在[TestInitialize]方法中创建你的模拟。
通过这个每次测试运行你的嘲笑将被再次创建。

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