l

2015年3月20日 星期五

測試案例壞味道(9):Fragile Test

March 17 09:45~10:36

image

 

你修改了待測程式,但你認為此次修改不會影響測試案例的執行結果,可是測試案例卻無法編譯或是執行失敗。如果發生這種狀況,你的測試案例就有了Fragile Test(脆弱的測試)這個壞味道。

這又是一個令人頭大的壞味道。明明修改的程式碼應該不會影響到已經存在的測試案例,為什麼原本可以執行的測試案例居然會執行失敗,甚至無法編譯?!

***

xUnit Test Patterns: Refactoring Test Code》書中提到導致這個壞味道的情況有好幾個:

  • Interface Sensitivity
  • Behavior Sensitivity
  • Data Sensitivity
  • Context Sensitivity

以上四點請參考〈脆弱的測試案例〉這一篇的說明。

 

  • Overspecified Software:過度規範的軟體是Behavior Sensitivity的一個特例,通常肇因於使用mock object技術來指定待測軟體要如何做某件事(how to do),而不是指定該做什麼(what to do)。因為測試案例透過mock object技術規範待測程式內部的互動關係(實作方式),所以一但待測程式的實做修改,即使它的外部行為沒有改變,這個測試案例也可能因此而執行失敗。
  • Sensitive Equality:將物件轉成字串來比對,一但物件內部資料改變,雖然行為沒有改變但原本的比對結果就會失敗。
  • Fragile Fixture:好幾個測試案例共用一個fixture,當新的測試案例加入之後,你修改這個共用的fixture來滿足新的測試案例,但是原本可執行的測試案例卻因此無法正常執行。這種情況算是Data Sensitivity或是Context Sensitivity的特例。

***

脆弱的測試會讓開發人員很煩躁,並且開始懷疑到底是production code寫錯,還是test code寫錯?!最終降低撰寫測試案例的意願。這是一個很常見的測試壞味道,如果沒有加以留意,早晚會破壞你希苦建立起來的測試安全網。

***

友藏內心獨白:後台不夠硬就麻煩啦。

沒有留言:

張貼留言