2011-02-22 69 views
0

我在Visual Studio 2010中使用MSTest,並且需要在所有測試運行後恢復我的數據庫。如果AssemblyCleanup超​​時,如何導致測試運行錯誤?

我所做的是裝飾與AssemblyCleanupAttribute屬性的方法。

<AssemblyCleanupAttribute()> 
Shared Sub AssemblyCleanup() 
    ' Restore my databases which takes a long time... 
End Sub 

問題是清理需要花費合理的時間,以至於達到超時。

我開始意識到發生了超時的唯一原因是,在調試模式下輸出窗口報告「... QTAgent32.exe,AgentObject:清理:超時在清理劑達到了。」因此,它非常安靜地失敗,如果MSTest報告測試運行錯誤,我會愛上它。

什麼是檢測和報告超時的最佳方式?我的理想解決方案是將超時報告爲測試運行錯誤。

+0

我到目前爲止發現沒有辦法來檢測超時。有一件事可以幫助其他人,如果你將清理代碼作爲清理腳本運行(在.testrunco​​nfig中配置,並將測試項目設置爲控制檯應用程序並在Main方法中調用AssemblyCleanup),那麼至少超時不會導致數據庫損壞。做上述操作將啓動一個不同的進程,因此無論測試運行是否由於超時而完成,它都將運行到完成。 – Llyle 2011-02-27 23:22:50

回答

2

總之,你不能因爲如果AssemblyCleanup超​​時 MSTest的報告錯誤。

如果您遇到此問題,那麼在這一點上,你需要考慮是否MSTest的這個限制是對你太偉大。還有其他更好的測試框架。

如果您決定堅持使用MSTest,並且只想確保(至少)AssemblyCleanup中的代碼/腳本運行完成,那麼您可以選擇將清理代碼作爲Process運行。這樣即使AssemblyCleanup在內部調用一個Thread.Abort,你的Process也會運行完成。這是凌亂的,但...

0

爲什麼不換每個測試的內容交易,並在測試結束時回滾事務?在這裏看到更多的信息:http://msdn.microsoft.com/en-us/library/bb381703(v=vs.80).aspx#dtbunttsttedp_topic7

+0

恢復數據庫的目的不是恢復更改。我恢復了數據庫,使得在測試運行後,我剩下一個數據庫,其中包含大量數據,這意味着我可以使用它來繼續使用更真實的數據進行手動測試。 – Llyle 2011-02-22 23:34:06

+0

因此,您正在使用相同的數據庫實例進行手動測試和自動測試? – mellamokb 2011-02-22 23:36:58

+0

這是正確的。 AssemblyCleanup可能會在未來做其他任何事情,我只想確保在超時發生時我知道它。 – Llyle 2011-02-22 23:42:14

相關問題