簡體   English   中英

為什么當我選擇 Run All 時我的單元測試(大部分)失敗,但當我一次只運行一個時通過?

[英]Why do my unit tests (mostly) fail when I select Run All but then pass when I only run one at a time?

我在 Visual Studio 2013 中工作,如果我選擇“全部運行”,我的大部分單元測試都會失敗,但是如果我選擇一個失敗的測試然后自己運行它,它就會通過。 此外,如果我選擇其中的一些測試並運行它們,第一個運行的測試將通過,而其他的將失敗。 但是,如果單獨運行,每個都會通過。

我注意到大多數失敗的測試都有一個“System.NullReferenceException:對象引用未設置為對象的實例..”,但同樣,只有在我運行所有測試時才會出現。

我可以一次運行一個這些測試,但我非常想避免這種情況。 如果有人以前遇到過這個問題,你是如何解決的?

上下文:在安裝了 .Net 4.6.2 的 Visual Studios 2013 中運行它。

更新:在每個測試之前運行一個測試初始值設定項,用於設置測試環境的狀態。 還有一個 dispose 方法在每次測試后運行以清理該環境。

現在,我看到發生的事情是,有一個對象在第一次通過測試初始值設定項之前不存在,但之后確實存在。 在第一次測試后的清理中,大多數其他對象都被刪除了,但這個對象只是變成了空。 在第二次(以及所有后來的通過)通過測試初始值設定項時——所以就在第一次之后的任何實際測試之前——該對象保持“空”,而不是像第一次那樣獲得文件路徑。

然后,每當其他測試中的任何一個嘗試調用該對象時,它們都會得到一個空值並拋出該異常。

沒有看到您的代碼,我只能猜測,所以就在這里。

您正在測試類的構造函數中而不是在 setup 方法中初始化您的對象。 這意味着多個測試同時使用相同的對象,並且這些對象可以是其他測試將它們置於的任何狀態。

檢查您是否將類級別對象設置為 null,然后在以后的測試中使用它。

我最終構建了一個靜態方法來在每次測試后處理空對象。 我通過檢查它是否正在使用、鎖定它,然后再次檢查以查看它是否正在使用,從而使該方法成為線程安全的。

現在,每當 testInitializer 再次運行時,該對象就會被創建並指向正確的路徑,而不是簡單地保持為 null。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM