2011-03-28 79 views
2

我有一套複雜的集成測試,它使用Perl的WWW :: Mechanize驅動Web應用程序,並根據特定的數據組合檢查結果。有超過20個子程序組成測試邏輯,循環數據等。每個測試都在不同的數據集上運行幾個測試子程序。我應該如何處理未修復的錯誤測試

該網頁應用程序並不完美,所以有時候錯誤會導致測試失敗,導致非常特定的數據組合。但是這些組合非常罕見,以至於我們的團隊很難長期修復這些bug。優先建立許多其他新功能。

那麼我應該怎麼做失敗的測試?這只是幾十個數據組合中的幾個測試。 1)我不能讓它失敗,因爲那樣整個測試套件就會失敗。 2)如果我們評論他們,這意味着我們錯過了對所有其他數據集進行測試。 3)我可以在失敗的特定數據集中添加一個標誌,並且如果該標誌已設置,則不會運行測試,但是在我的測試子例程中,我將遍歷整個地方的額外標誌。

什麼是最乾淨和最簡單的方法來做到這一點? 還是乾淨而容易相互排斥?

回答

11

這就是TODO的用途。

對於待辦事項塊,內部測試預計會失敗。 Test :: More將正常運行測試,但會打印出指示它們「待辦事項」的特殊標誌。 Test :: Harness會將錯誤解釋爲正確。如果有什麼成功的話,它會報告它是一個意想不到的成功。然後你知道你所做的事情已經完成,並可以刪除TODO標誌。

關於待辦事項測試的好的部分,而不是簡單地評論一個測試塊,它就像是有一個程序化的待辦事項列表。你知道還有多少工作要做,你知道有什麼錯誤,並且當它們修復時你會立即知道。

一旦todo測試開始成功,只需將其移動到該塊之外即可。當該塊爲空時,將其刪除。

+0

正是我需要的,謝謝你爲我節省了一些時間RTFM! – 2011-03-28 10:57:28

0

我看到兩個主要選擇

  1. 禁用測試(註釋出來),用你的bug跟蹤系統的參考(即一個bug IG),可能保持一記中的bug以及有是爲這個bug準備的測試

  2. 將失敗的測試移到單獨的測試套件中。你甚至可以逆轉失敗的斷言,所以你可以運行該套件,而當它是綠色的錯誤仍然存​​在,如果它變紅,錯誤消失或其他可怕的。當然,鏈接到bugtracking系統和包仍然是一件好事。

0

如果實際使用Test :: More與WWW :: Mechanize結合使用,則關閉case(請參閱@daxim的註釋)。如果沒有,想想類似的方法:

# In your testing module 
our $TODO; 
# ... 
if (defined $TODO) { 
    # only print warnings 
}; 

# in a test script 
local $My::Test::TODO = "This bug is delayed until iteration 42"; 
相關問題