2010-11-11 69 views
5

我在C#中編寫了程序,它從命令行調用MSTest。 測試用例之一引發StackOverflowException,它導致QtAgent32(和我的應用程序)進程中斷。 我能做些什麼來防止這種情況(我不能改變單元測試)?MSTest - 使用StackOverflowException的單元測試

+0

你能分享你的C#代碼嗎?理想情況下,同樣的對話框應該出現在C#代碼中,我想知道它是否與進程startInfo參數有關? – 2010-11-12 15:55:23

回答

3

您可以避免這種類型的崩潰的一種方法是通過設置QTAgent32.exe.config(和/或QTAgent.exe.config中的legacyUnhandledExceptionPolicy屬性取決於機器/ testrun的位數),如here所述。此鏈接的相關文本如下: -

作爲臨時兼容性措施,管理員可以在應用程序配置文件的部分放置兼容性標誌。這會導致公共語言運行庫恢復到版本1.0和1.1的行爲。

這將切換「未處理的異常」處理行爲到.NET 1.1和過程中不會對這樣的異常崩潰。

+0

感謝您的回答。我非常有用。 – mirt 2010-11-15 21:32:48

2

問題是,你無法趕上.NET上的StackOverflowException(從2.0版本開始)。這可能意味着你無法解決你的問題 - 因爲單元測試框架根本無法捕捉到異常。

請參閱以下相關問題的SO:

有其它線程上的一些有趣的建議 - 例如,你可以創建Thread並檢查當前FrameCount更早發現堆棧溢出。但是,這可能不會很可靠。所以,恐怕沒有好的答案...

+0

好的,但是當我從命令行(而不是從C#代碼)調用MSTest時,執行此單元測試時,我可以單擊錯誤消息框上的取消,MSTest繼續運行。我不知道如何做這樣的事情,但在C#代碼 – mirt 2010-11-11 16:44:10

+0

@ mirt - 你可以添加額外的信息到原來的問題?這些都是很好的細節。 – 2010-11-12 16:05:38

相關問題