3

下面您可以看到一些在Windows Phone單元測試應用程序中使用Mstest編寫的代碼。
我有一個正常的TestMethod的稱爲TestMethod1和DataTestMethod稱爲TestMethod2其中有三個數據行:TestInitialize和TestCleanup不會在DataTestMethod的每個DataRow之前和之後運行

[TestClass] 
public class UnitTest1 
{ 
    [TestInitialize] 
    public void Setup() 
    { 
     Debug.WriteLine("TestInitialize"); 
    } 

    [TestMethod] 
    public void TestMethod1() 
    { 
     Debug.WriteLine("TestMethod1"); 
    } 

    [DataTestMethod] 
    [DataRow("a")] 
    [DataRow("b")] 
    [DataRow("c")] 
    public void TestMethod2(string param) 
    { 
     Debug.WriteLine("TestMethod2 param=" + param); 
    } 

    [TestCleanup] 
    public void TearDown() 
    { 
     Debug.WriteLine("TestCleanup"); 
    } 
} 

如果我運行在調試模式下(Ctrl + R鍵,Ctrl + T鍵在Visual Studio中測試)我看到這在輸出面板:

TestInitialize
TestMethod1
TestCleanup
TestInitialize
TestMethod2 PARAM = C
TestMethod2 PARAM =一個
TestMethod2 PARAM = B
TestCleanup

正如你所看到的,TestInitialize被執行只有兩次:一次是前TestMethod1和一次在TestMethod2之前用參數c。
對於TestCleanup來說,它在TestMethod1之後執行一次,最後一次執行。

我希望TestInitialize和TestCleanup可以在每次測試之前和之後執行,無論它是TestMethod還是DataTestMethod。否則,一次測試的執行會影響下一次測試。

我希望它是這樣的:

TestInitialize
TestMethod1
TestCleanup
TestInitialize
TestMethod2 PARAM = C
TestCleanup
TestInitialize
TestMethod2 PARAM =一個
TestCleanup
TestInitialize
TestMethod2 PARAM = B
TestCleanup

我沒有發現任何人有同樣的問題,我是什麼我做錯了?

回答

2

我對此有點新,但我認爲如果你用[TestMethod]屬性標記[DataTestMethod]屬性,它應該爲每個測試方法運行Initialize和Cleanup。

[TestMethod] 
[DataTestMethod] 
[DataRow("a")] 
[DataRow("b")] 
[DataRow("c")] 
public void TestMethod2(string param) 
{ 
    Debug.WriteLine("TestMethod2 param=" + param); 
} 

更新: 微軟稱:TestCleanupAttribute 「後,將標有TestMethodAttribute方法來運行...」

當我測試它這樣做的工作。當你說它不起作用時,請提供更多細節。

如果您希望每個測試類只運行一次的初始化程序,則可以使用屬性TestClass Attribute。 See this post.

// Use ClassInitialize to run code before running the first test in the class 
[ClassInitialize()] 
public static void MyClassInitialize(TestContext testContext) { } 

// Use ClassCleanup to run code after all tests in a class have run 
[ClassCleanup()] 
public static void MyClassCleanup() { } 
+0

這是行不通的。 – dcastro 2015-04-20 21:25:07