很多時候人們寫測試時,他們會在狀態混亂後自行清理。通常這並不重要,因爲對於大多數測試來說對象傾向於被拆除和重新創建,但是有一些不幸的情況是對象的全局狀態會持續整個測試運行,並且當您運行測試時依賴於並修改那個全球國家,按照一定的順序,它們失敗了。有沒有一種很好的方法來調試RSpec(RSpec2)中依賴於順序的測試失敗?
這些測試和可能的實現顯然需要修復,但試圖找出在相互影響的測試可能不是完整測試套件中唯一的東西時導致失敗的原因是一件很痛苦的事情。當最初並不清楚故障是否與訂單相關時尤爲困難,並且可能間歇性地或在一臺機器上而不是在另一臺機器上故障。例如:
rspec test1_spec.rb test2_spec.rb # failures in test2
rspec test2_spec.rb test1_spec.rb # no failures
在RSpec的1有some options (--reverse, --loadby)訂購的測試運行,但那些已經在RSpec 2消失,只是在調試反正這些問題的最低限度的幫助。
我不確定RSpec 1或RSpec 2默認使用的順序,但是我過去使用的一個自定義設計的測試套件在每次運行時隨機地對測試進行排序,以便更快地發現這些故障。在測試輸出中,用於確定排序的種子與結果一起打印,因此即使您必須做一些工作來縮小套件中引起它們的各個測試的範圍,也很容易重現故障。然後有一些選項允許您在任何給定的測試文件中按順序啓動和停止,這使您可以輕鬆地進行二分查找以找到問題測試。
我還沒有在RSpec中找到任何這樣的實用程序,所以我在這裏問:人們發現調試這些類型的順序依賴測試失敗有什麼好方法?
這是非常修辭。你能嘗試簡化這個問題嗎? – 2011-05-10 06:32:38
這就是標題/標題的用途。最後一句話。其餘的是澄清我的意思是「順序依賴測試失敗」,因爲我沒有找到其他問題處理,然後試圖描述我在尋找什麼樣的解決方案。如果這兩者對於閱讀這個問題的其他人都是顯而易見的,那麼我同意其他的verbage過於誇張,但我不確定這是否明顯。 – mmrobins 2011-05-10 06:44:25