2012-11-01 244 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(); 
}