2012-01-29 137 views
5

我在Visual Studio 2010中進行單元測試時遇到了一個奇怪的問題。 當我使用「調試測試」時沒有任何斷點),但在使用「運行測試」時失敗。 此測試使用外部DLL,所以我無法正確調試它。VS2010中的單元測試 - 「調試」通過,「運行」失敗

你知道爲什麼會出現這種情況嗎? 當所有其他參數相同時,爲什麼「調試測試」與「運行測試」不同?

+2

你有什麼'你的代碼庫中的CondtionalAttribute'只執行調試嗎?任何'#if調試'部分?在第三方庫中,他們完全有可能在調試模式和發佈模式下做不同的事情。 – Oded 2012-01-29 16:05:40

+0

添加到Oded的問題中,有沒有特定的時間特定代碼?當您正在調試時,可能需要延遲的任何代碼部分都會通過,但在正常流程中會失敗。 – 2012-01-29 16:08:34

+0

您是否檢查過測試結果窗口並查看您到達的錯誤。 – 2012-01-29 17:31:23

回答

2

可能有幾個原因,但要指出一個原因,您必須給我們一些代碼才能使用。

這可能是代碼排除:

#ifdef _DEBUG 
//do something 
#endif 

這將僅在調試模式下執行。

它可能是優化。雖然它們通常不應該影響行爲,但不應該依賴於被調用的析構函數或複製構造函數。

如果您在代碼中進行任何黑客行爲,它可能也只適用於調試。

1

我懷疑你正在訪問內存越界。調試和釋放之間的一個主要區別是,如果填充和特殊標記用於內存分配以捕獲某些類型的錯誤,則調試會添加工具包。這意味着調試和發佈版本之間的內存佈局通常非常不同。我懷疑你是以調試器沒有捕獲的方式訪問內存,在調試版本中發現一個意外的有效值,但在發佈版本中發現一個無效的值。

3

切換你的解決方案發布模式,而不是調試,運行一個完整的建立,切換回調試和試,讓我知道結果,我認爲測試將通過....

+0

這解決了我的問題。謝謝! – gstar 2015-09-09 18:23:23

相關問題