2011-12-02 32 views
3

我有這樣MSTest的,什麼時候[ClassCleanup]調用其測試類繼承

[TestClass] 
class BaseClass 
{ 
// specific methods and members relevant to all functional tests are here 
// ie how to work with db 
} 

[TestClass] 
class Module1:BaseClass 
{ 
     [ClassInitialize] 
     public static void Module1TestsInit(TestContext context) 
     { 
      //create some db data here, which is needed only for Module1 
     } 
     [ClassCleanup] 
     public static void Module1TestsCleanup() 
     { 
      //delete Module1 db data 
     } 
} 

[TestClass] 
class Module2:BaseClass 
{ 
     [ClassInitialize] 
     public static void Module2TestsInit(TestContext context) 
     { 
      //create some db data here, which is needed only for Module2 
     } 
     [ClassCleanup] 
     public static void Module2TestsCleanup() 
     { 
      //delete Module2 db data 
     } 
} 

的功能測試層次當測試執行我期待的是[ClassCleanup]將運行時從Module1所有的方法都是當發生完成,然後當Module2測試完成時再次完成。我有許多類,如Module1具有相同的基類。

但是,所有ClassCleanup方法都只在所有模塊的所有測試完成時才運行。這是不方便的,因爲我在不同的模塊中有一些衝突的數據,並希望在完成這個類測試時清理每個類的結果。

有什麼想法?

+0

對於它的價值,'靜態'和_inheritance_不要混合... –

+0

@AustinSalonen感謝您的迴應!但是你有什麼建議?不要使用基類進行測試? – Paul

回答

2

本聲明

所有ClassCleanup方法都只能運行在所有模塊的所有測試完成

...衝突與MSDN的ClassCleanupAttribute(重點煤礦)...

標識包含要使用的代碼的方法在測試類中的所有測試都已運行後並免費獲得測試課程獲得的資源。這個類不能被繼承。

由於您的初始化和清除方法是靜態的,他們不是從公共基礎繼承,使他們 應該是獨立的。但是由於它們是靜態的(並且我不使用VisualStudio.TestTools,因此我無法驗證),是否會導致您遇到的問題?

+0

[ClassCleanup]方法必須是靜態的。 – Paul

+0

這個空間中的問題/困惑似乎來自這樣一個事實,即真相在這兩件事之間。是的,它必須在課程中的所有測試完成之後,但不能保證在任何其他測試開始之前。這聽起來可能是ASAP,或者更晚。 –

0

如果可能的話,我會嘗試將您的測試類拆分爲2個文件並對MSTest進行兩個調用。我們遇到了類似這樣的問題,而且這似乎有效。

3

但是,Nunit的工作方式與MSTest不同。在MSTest中執行下一個類初始化之前,應首先執行ClassCleanup方法。

相關問題