2011-01-13 135 views
18

我有2個問題在使用VS 2010進行集成測試如何使用Visual Studio訂購執行方法以執行集成測試?

首先,我真的需要找到一種方法來按照我希望的順序執行這些測試方法。注:我知道在單元測試中,方法應該獨立於其他任何東西,但這些都是集成測試,我依賴於哪個方法首先運行的順序。

在同樣的說明中,有沒有辦法通過運行測試來保持局部變量?例如像下面的代碼現在失敗了。

[TestClass] 
public class UnitTest1 
{ 
    int i = 0; 
    [TestMethod] 
    public void TestMethod1() 
    { 
     i = 5; 
    } 

    [TestMethod] 
    public void TestMethod2() 
    { 
     Assert.AreEqual(5, i); 
    } 
} 

那麼有沒有辦法做到這些?

回答

21

要按照特定的順序執行測試我也跟着下面的步驟:

在測試項目與TEST1,TEST2和TEST3

1右鍵單擊該項目「添加」 - >「新的測試......」
2選擇‘順序測試’
3中的文件T雙重點擊帽子出現「OrderedTest1。orderedtest」

alt text

4生成項目,如果沒有建立以前
5從可用的測試列表中選擇要測試並責令其

alt text

從這點出現在測試列表編輯器中的新測試

alt text

這是一個額外的測試,它以正確的順序運行封閉的測試,但是如果您不小心運行了項目中的所有測試,包含在有序列表中的測試將執行兩次,因此您需要以某種方式管理列表或測試類別以避免這種情況。
我試過禁用單個測試,但也禁用了有序的測試,我不知道這樣做的更好方法。

6

通過使用屬性[TestInitialize]和[TestCleanUp]或[ClassInitialize]和[ClassCleanup],最好使用函數來設置測試並對其進行清理。
http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting(v=VS.100).aspx

下面的代碼是類似的事情爲例,你想要什麼:

[TestClass] 
public class UnitTest1 
{ 
    int i=0; 

    [TestInitialize] 
    public void Setup() 
    { 
     i = 5; 
    } 

    [TestMethod] 
    public void TestMethod1() 
    { 
     Assert.AreEqual(5, i); 
    } 
} 

功能設置將執行每個測試之前調用。 如果您需要將值從一個測試傳遞給另一個測試,則可能需要考慮使用靜態變量,由於執行的不確定性順序,因此不推薦使用該變量。

通常有一種方法可以避免使用設置/清除技術來需要特定的順序,但確實如此,對於非常複雜的集成測試來說,這可能並非如此。
如果沒有可能的方法來避免讓他們重新排序,你可以考慮將它們合併爲一個,再次突破每個測試只有一個斷言的最佳實踐,但是如果它們相互依賴得太多,它可能會是偶數這樣做更好,因爲在這種情況下,一次測試失敗可能會損害其他測試結果。

編輯: 可能使用命令測試解答問題1,使用靜態變量的問題2: http://msdn.microsoft.com/en-us/library/ms182631.aspx

+0

謝謝Cristian的意見。我知道你提到的屬性,不幸的是這些不是我所追求的。我正在對測試數據源運行集成測試,所以即使它們在某個地方失敗了,我仍然可以恢復數據。我在SpecFlow上看到了Rob Conery的視頻,他似乎已經實現了http://tekpub.com/view/concepts/5我只是不知道他是如何做到的。 – 2011-01-13 20:58:51

+0

我剛剛添加了編輯的問題,並添加了有序測試的想法。讓我知道這是否真的有效。 – 2011-01-13 21:15:24

相關問題