2013-02-03 19 views
2

我在以下方式(使用相同的靜態變量)在同一個測試程序集中有N個MSTest測試類和方法。在每個MSTest測試方法開始時重置一個靜態變量

[TestClass] 
public class TestClass1 
{ 
    [TestMethod] 
    public void TestMethod1A() 
    { 
     MyClass.StaticVariable = 0; 
     MyClass.StaticVariable = MyClass.StaticVariable + 1; 
     Assert.AreEqual(1, MyClass.StaticVariable) 
    } 

    [TestMethod] 
    public void TestMethod1B() 
    { 
     MyClass.StaticVariable = 0; 
     MyClass.StaticVariable = MyClass.StaticVariable + 1; 
     Assert.AreEqual(1, MyClass.StaticVariable) 
    } 
} 

[TestClass] 
public class TestClass2 
{ 
    [TestMethod] 
    public void TestMethod2A() 
    { 
     MyClass.StaticVariable = 0; 
     MyClass.StaticVariable = MyClass.StaticVariable + 1; 
     Assert.AreEqual(1, MyClass.StaticVariable) 
    } 

    [TestMethod] 
    public void TestMethod2B() 
    { 
     MyClass.StaticVariable = 0; 
     MyClass.StaticVariable = MyClass.StaticVariable + 1; 
     Assert.AreEqual(1, MyClass.StaticVariable) 
    } 
} 

這些測試是否保證通過?我的觀點是MSTest是否會同步執行測試方法,始終允許MyClass.StaticVariable在被聲明之前初始化和增加一次?下列情況可以發生嗎?

1. TestMethod1A makes MyClass.StaticVariable 0 
2. TestMethod2B increments MyClass.StaticVariable by 1 
3. TestMethod1A increments MyClass.StaticVariable by 1 (making the value equal to 2) 
4. TestMethod1A asserts (Fail!) 
+0

我不是對MSTest非常有經驗,但我使用NUnit相當多,而且我的經驗是NUnit將程序集中的所有測試排序(按字母順序排列),並同步通過所有測試。我猜想同樣如此MSTest –

+0

如果是這樣的話,我會成爲一個快樂的露營者。我甚至不需要測試以某種順序運行,只需同步運行即可。 – Harindaka

回答

1

MSTest的支持多線程,但是你需要turn it on測試設置文件。默認情況下,所有測試都將同步運行。

另外,如果你想重置每個測試運行的變量,也就是你可以在方法放置屬性和方法將在類中的每個測試之前運行:

[TestInitialize()] 
public void TestInit() 
{ 
    MyClass.StaticVariable = 0; 
} 
+0

謝謝約翰。只是想知道是否可以將參數傳遞給TestInit。如果MyClass.StaticVariable是一個對象而我們需要做類似於MyClass.StaticVariable = new StaticVariableClass(parameter)的設置來重置。如果參數隨每個單元測試方法而改變,使用TestInitialize這仍然可以實現嗎? – Harindaka

+0

@Hindindaka如果參數需要隨每個單元測試而改變,那麼應該在測試本身中,並且TestInitialize方法實際上不適用。 –

相關問題