2009-11-30 63 views
5

在複雜的VS2008解決方案中,我有三個單元測試項目。由於它們在相同的測試數據庫上運行,因此測試項目一個接一個地執行很重要。首先哪個項目並不重要,只是在另一個項目開始之前就完成了。在解決方案中運行所有測試時的單元測試序列

如果我想執行所有這些,有幾種方法可以做到這一點,這導致不同的結果:

  • 我有一個測試列表,其中測試由項目有序.vsmdi文件。如果我打開列表並從測試列表編輯器執行測試,一切都很好。
  • 如果我打開測試視圖窗口,按項目排序測試並運行它們,再次一切正常。
  • 但是,如果我通過從菜單中選擇「測試 - >運行 - >解決方案中的所有測試」來運行測試,它們將以隨機順序執行,其中一些測試失敗,因爲其他測試項目之一已經在操作測試D b。

所以問題是,什麼決定了使用第三種方法時的單元測試序列?有沒有辦法在.testrunco​​nfig中指定默認測試列表?

由於有解決方法,這個問題根本就不重要。但任何想法都是受歡迎的。 謝謝。

回答

8

您正在體驗單元測試氣味交互式測試,在出色的xUnit Test Patterns中描述。更具體地說,你患有Shared Fixture,這是另一種說法,你的幾個測試使用相同的共享數據庫,並且它們依賴於以前的測試運行的結果。

這是一種反模式,應該不惜一切代價避免。本書就如何處理這種情況提供了廣泛的指導。

我之所以首先描述這一點,是因爲這是MSTest不能保證測試順序的原因。雖然順序可能看起來(半)確定性的,但你不能依賴它。一些其他的單元測試框架(xUnit.NET可以想到)甚至可以在每次運行測試套件時以隨機順序運行測試。 MSTest並不是那麼極端,但是你無法訂購你的單元測試。如果你正在運行Visual Studio Team Suite或者(我相信)團隊測試,那麼有一種測試稱爲有序測試。你可以用它來指定所有的測試(包括單元測試)應該以特定的順序執行。

+0

我完全同意應該避免共享夾具。然而,這裏的問題不是測試的順序,而是測試項目並行運行,導致數據庫設置和拆卸的同步問題。我沒有詳細描述。我認爲現在最好的解決方案是db的全局設置和拆卸。 – Wullie 2009-12-01 02:23:56

+0

我不認爲MSTest並行運行測試 - 至少,這不是我的經驗。 – 2009-12-01 05:46:48

相關問題