我在我的測試套件中看到一個問題,一切正常,直到我超時。如果由於超時而導致測試失敗,tearDown函數永遠不會被調用,從而使反應堆不清潔,從而導致其餘測試失敗。我認爲應該在超時後調用tearDown,有人知道爲什麼會發生這種情況嗎?tearDown在扭曲試驗超時後未被調用?
回答
無論測試結果如何,您都應該調用tearDown()
。從the documentation爲tearDown()
:
這就是所謂即使測試方法引發異常
然而,有一個陷阱。從相同的文檔:
只有在setUp()成功時纔會調用此方法,無論測試方法的結果如何。
所以,它聽起來就像你也許開始反應器setUp()
,當它超時,這是防止您的tearDown()
運行 - 的想法是,無論你試圖在setUp()
到「設置」中不成功設置,所以你不想試圖撕毀它。但是,除非您提供方法的代碼以及任何相關測試的代碼,否則很難確定診斷。
這很奇怪,因爲在我的盒子裏,即使發生超時,拆卸也會執行。除非您使用--unclean-warnings
標誌,否則測試應停止運行,如果反應器不處於清潔狀態。測試運動員在超時後停止嗎?你正在運行什麼版本的Python和Twisted?作爲一個方面說明,如果您需要針對特定測試功能運行獨特的拆卸,則有一個非常方便的addCleanup()
回調。如果您需要取消回調,LoopingCall或callLater函數,以便反應堆不處於髒狀態,它就派上用場了。 addCleanup
返回Deferred
,因此您可以鏈接執行adhoc拆卸的回調。如果班級拆解不適合你,這可能是一個很好的選擇。
PS
我已經習慣了寫「很乖」扭曲的代碼,我甚至不記得怎麼進入不潔淨的反應器狀態:d我發誓,我不是吹牛。你能否給我提供一個你正在做什麼的簡要總結,以便我可以在我的最後測試它?
我發現了這個問題,我會把它放在這裏,以防將來對其他人有幫助。
我正在返回一個已經被調用的延遲測試(如in,deferred.callback已被調用),但它仍然有一個未完成的回調鏈。從我在這裏的試驗代碼https://github.com/twisted/twisted/blob/twisted-16.5.0/src/twisted/trial/_asynctest.py#L92中可以看到,發生這種情況時反應堆會發生碰撞,這就解釋了爲什麼tearDown不會被調用。對我來說,解決方案是從有問題的測試中返回延遲,這些測試沒有長時間存在的回調鏈(回調函數本身不會返回延遲)。
- 1. 調用超類的方法與扭曲
- 2. 在Python中實現超時扭曲
- 3. Minitest #setup和#teardown在通過Rake測試運行時未調用
- 4. 圖像在上傳時被扭曲
- 5. 扭曲的錯誤:在request.finish被調用後請求調用了Request.write
- 6. Python扭曲,SSL超時錯誤
- 7. 蟒蛇扭曲代理超時
- 8. 如何添加超時扭曲延遲
- 9. 使用試驗扭曲的訂購測試
- 10. 扭曲的試驗在測試之間掛起
- 11. UIImageView會被扭曲嗎? (iPhone)
- 12. 試圖在OSX上使用扭曲
- 13. 驗證控件扭曲UI
- 14. 扭曲在connectionMade調用getPeerCertificate返回無
- 15. 調用本地(在內存中)扭曲
- 16. 扭曲和扭曲Movieclip
- 17. CIFilter通過使用imageview被扭曲(iOS)
- 18. 扭曲集成測試
- 19. 測試與扭曲和inlineCallbacks
- 20. 使用扭曲
- 21. 扭曲在https
- 22. 在扭曲
- 23. 扭曲試驗單元測試得到的ImportError
- 24. 模擬出time.time()進行扭曲試驗測試
- 25. 如果在n秒後沒有讀取,扭曲的TCP服務器超時
- 26. setContentView在嘗試從其他佈局調用時未被調用
- 27. 在setUp()中調用tearDown()?
- 28. @ExceptionHandler未被調用測試
- 29. listenFailure後退出扭曲應用程序
- 30. haproxy後面的扭曲應用程序
有什麼方法可以判斷setUp是否失敗?它看起來正在成功完成並繼續進行測試。然後它在測試和tearDown失敗永遠不會被稱爲 – ppao
超時是否引發異常?如果是這樣,你可以嘗試捕獲該異常。但是如果沒有看到方法就很難說。你可以在你的問題中添加你的'setUp'方法的代碼嗎? – elethan