2016-08-02 66 views
0

在我們的應用程序測試套件中,我們有隨機測試失敗並出現此錯誤: Test'Some_Test_Name'超出了執行超時期限。解決SpecFlow ScenarioContext被丟棄的錯誤

當我們得到這樣的錯誤時,緊接着的測試也失敗並出現此錯誤: System.Threading.ThreadAbortException:線程被中止。 標準輸出消息: - >警告:以前的ScenarioContext未處理。 - >錯誤:線程正在中止。

我試過各種各樣的東西來解決這個問題,但我還沒有找到一種方法來訪問ScenarioContext來處理它應該是它的情況下。我試着從BeforeScenario中訪問它,但總是在錯誤發生之前發生。

我們解決了一些超時問題,但對於仍然存在的隨機問題,我希望能夠減少由ScenarioContext問題引起的故障,並從測試結果中刪除這些誤報。有任何想法嗎?

回答

0

警告The previous ScenarioContext was not disposed通常在測試未完成或AfterScenario方法拋出異常時發生。

我相信這個警告是良性的,可以安全地忽略。當你防止你的測試超時,或者讓測試成功完成(通過阻止AfterScenario方法拋出),它會消失。

+0

我幾乎說的。我明確指出的是,我想刪除假當發生這種情況時會出現這種情況,當你的測試運行時發生誤報時,這不是一種良性的行爲。 –

+0

我很喜歡如果你不覺得這回答了你的問題,你可以試試。我只是解釋了這個警告是如何來自specflow代碼的。阻止警告的唯一方法是防止超時方案中的超時或停止正在阻止運行清理的代碼運行的方法中的異常。另一種方法是修復specflow代碼,以便在導致此問題的任何一種情況下清除場景。 –

+0

如果你在specflow github頁面上提出了一個問題,我會試着看看可以做些什麼來解決它,但不能承諾任何時間尺度。 –

0

我也面臨同樣的問題。 - 最後在[AfterScenario]塊。

try 
{ 
    //your stuff 
} 
finally 
{ 
    driver.Dispose(); 
} 

在我看來,這應該爲你工作爲好。

+0

一次運行多個測試時不起作用,因爲如果一次失敗,例如打到最後,然後驅動程序配置 – Danny

+0

最終應該在每次測試後實際配置驅動程序,不管是否失敗。這是最後一點。 – nitzel