l

2015年3月10日 星期二

測試案例壞味道(5):Test Code Duplication

March 04 10:09~10:43

image

Cat Duplication

 

在production code的領域,「重複程式碼」(Duplicated Code)可以算是所有程式碼壞味道的榜首(請參考〈談壞味道(1):Duplicated Code〉)。這個現象在測試案例中應該也成立,而且這個壞味道還特別容易發生。因為測試案例經常會使用相同或類似的fixture,搭配不同的參數與類似的驗證邏輯來測試待測程式。針對相同的待測程式,當開發人員寫好第一個測試案例之後,很容易使用copy and paste這個「祕技」撰寫第二個測試案例,然後只修改驗證邏輯的expected result與actual result。

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

  • Cut-and-Paste Code Reuse:不知道為什麼作者要用「Cut-and-Paste」而不是「Copy-and-Paste」?總之這個「祕技」就是產生重複程式碼的最大原因。
  • Reinventing the Wheel:開發人員不熟悉測試工具提供的功能,所以自己手工打造相同功能的程式碼。例如,在JUnit 4以經有提供參數化測試案例的功能。不了解此功能的開發人員,會自己撰寫程式來模擬類似的效果。由於自己手工打造的參數化測試案例具有類似的結構,因此也算是Test Code Duplication壞味道。

***

Test Code Duplication壞味道非常常見,剛開始撰寫測試案例的鄉民可能會認為這是一種「正常現像」而不加以理會。測試案例也是程式碼,理應儘量維持在clean code的層次。當發現這個壞味道的時候,請撥點時間重構測試案例,以維持測試案例的可修改性。

***

友藏內心獨白:這可不是做「備援」喔。

1 則留言: