2008-10-24 186 views
5

微軟單元測試框架突然發生罷工。VSTestHost.exe已停止工作 - 無法運行單元測試

當我嘗試在VS2008中運行測試時,出現消息「VSTestHost.exe已停止工作」的對話框。

我有Vista上運行的Visual Studio Team System 2008(版本9.0.30729.1 SP),應用了所有更新。

「問題報告和解決方案」建議我「升級到最新的零售版Visual Studio Team Edition for Software Testers」,這是不正確的。

我試過重新啓動。
我試過「devenv/resetuserdata」

這些沒有什麼區別。

我想回到MbUnit基於這個廢話,但這不是我的選擇。
有關如何解決此問題的任何建議?

回答

7

這通常是由於代碼中的錯誤,如無限循環或循環引用。

我有同樣的問題,並意識到它是我的代碼搞亂了,測試框架只是簡單地保護自己免受我的代碼。

對我來說關鍵是兩個不同的測試框架發生同樣的事情。所以它必須是我的代碼。

1

我發現了我所問的問題,這是我的錯。我編寫了一個堆棧溢出:我將一些代碼重構爲一個擴展方法,將其重命名爲匹配它調用的Linq擴展方法,因此它只是自我遞歸地調用它。

從此吸取教訓:
1:"select" isn't broken。 由於聲譽不佳,我太快責怪這個框架。

2:但它確實有一個病態的,一般的,完全誤導性的錯誤信息。

在錯誤信息不好的情況下,一個很好的調試技巧就是試圖確定哪些是什麼以及哪些不會導致錯誤。就我而言,一旦我注意到這不是「測試運行」,那麼突破就會發生失敗,它只是包含Sql數據庫測試的運行 - 域對象和模擬存儲庫測試可以運行得很好,所以必須是關於它運行的代碼的東西。而且調試器會進入測試。我從災難性的錯誤中認定它甚至沒有那麼遠。

0

您是否嘗試過在Visual Studio上運行修復或甚至重置爲出廠設置?

要重置爲出廠設置,請從運行窗口運行devenv/ResetSettings。

1

重要的是要注意,儘管解釋VSTestHost.exe停止工作的錯誤信息不是很具描述性。在測試結果中,有一個鏈接表示「測試運行已完成」(或者在您的情況下,它會說「測試運行失敗」),點擊此時您將看到發生的導致測試主機的確切錯誤消息失敗(堆棧溢出異常)。

他們會埋葬這些信息,但特別是當主機不會崩潰但有些測試根本無法正常工作時有用,有時可以找到爲什麼可以在該鏈接中找到的信息。