Clean code 單元測試

34
單元測試 測試驅動開發(Test Driven Development以程式中最小的邏輯單元為對象,驗證其邏輯正確性

Transcript of Clean code 單元測試

Page 1: Clean code 單元測試

單元測試

測試驅動開發(Test Driven Development)以程式中最小的邏輯單元為對象,驗證其邏輯正確性

Page 2: Clean code 單元測試

單元測試

測試驅動開發(Test Driven Development)以程式中最小的邏輯單元為對象,驗證其邏輯正確性終於輪到小廢物Vito報告惹,請大家鞭小力點QAQ

Page 3: Clean code 單元測試

9.1 TDD三定律

Page 4: Clean code 單元測試

9.1 TDD三定律

(1)沒有測試之前不要寫任何功能代碼

----> 測試先行,後寫功能

Page 5: Clean code 單元測試

9.1 TDD三定律

(1)沒有測試之前不要寫任何功能代碼

----> 測試先行,後寫功能

(2)只編寫恰好能夠體現一個失敗情況的測試代碼

----> 單一性

Page 6: Clean code 單元測試

9.1 TDD三定律

(1)沒有測試之前不要寫任何功能代碼

----> 測試先行,後寫功能

(2)只編寫恰好能夠體現一個失敗情況的測試代碼

----> 單一性

(3)只編寫恰好能通過測試的功能代碼

----> 正確邏輯只有一種

Page 7: Clean code 單元測試

9.1 TDD三定律

(1)沒有測試之前不要寫任何功能代碼

----> 測試先行,後寫功能(原因:先寫功能,會導致測試的邏輯變得很難寫)

(2)只編寫恰好能夠體現一個失敗情況的測試代碼

----> 單一性

(3)只編寫恰好能通過測試的功能代碼

----> 正確邏輯只有一種

Page 8: Clean code 單元測試

9.2 保持測試的整潔

測試帶來的好處

Page 9: Clean code 單元測試

9.2 保持測試的整潔

測試帶來的好處

(1)提升程式碼擴展性。

(2)提升程式碼可維護性,較不怕修改造成額外的缺陷。

Page 10: Clean code 單元測試

9.2 保持測試的整潔

測試帶來的好處

(1)提升程式碼擴展性。

(2)提升程式碼可維護性,較不怕修改造成額外的缺陷。

(3)提升程式碼復用性

(4)實現自動化測試(白箱測試)

Page 11: Clean code 單元測試

9.3 整潔的測試

好的測試可讀性高,其結構簡潔有力,主要可分為三個環節。

Page 12: Clean code 單元測試

9.3 整潔的測試

好的測試可讀性高,其結構簡潔有力,主要可分為三個環節。

(1)構造測試數據

Page 13: Clean code 單元測試

9.3 整潔的測試

好的測試可讀性高,其結構簡潔有力,主要可分為三個環節。

(1)構造測試數據

(2)操作測試數據

Page 14: Clean code 單元測試

9.3 整潔的測試

好的測試可讀性高,其結構簡潔有力,主要可分為三個環節。

(1)構造測試數據

(2)操作測試數據

(3)驗證操作結果是否符合預期

Page 15: Clean code 單元測試

9.3 整潔的測試

好的測試可讀性高,其結構簡潔有力,主要可分為三個環節。

(1)構造測試數據

(2)操作測試數據

(3)驗證操作結果是否符合預期

試舉一例,如page.134的例子

Page 16: Clean code 單元測試

9.3 整潔的測試

public void testGetPageHierarchyAsXml() throws Exception {

makePages(“PageOne”, “PageOne.ChildOne”, “PageTwo”); /*構造*/

submitRequest(“root”, “type:pages”); /*操作*/

assertResponseIsXML();

assertResponseContains(“<name>PageOne</name>”, “<name>PageTwo</name>”,“<name>ChildOne</name>”);

/*驗證*/

}

Page 17: Clean code 單元測試

9.3.1 面向特定領域的測試語言

代碼清單9-2,展示了為測試構造一種面向特定領域的語言的技

巧,沒有直接使用對系統進行操作的API,而是打造一套包裝這

些API的函數和工具代碼,這樣就更方便編寫測試,寫出來的東

西也更容易閱讀,此正是一種測試語言,可以幫助開發者編寫自

己的測試,也可以幫助後人閱讀測試。

Page 18: Clean code 單元測試

9.3.2 雙重標準

代碼清單9-3 EnvironmentControllerTest.java

@Test

public void turnOnLoTempAlarmAtThreashold() throws Exception {

hw.setTemp(WAY_TOO_COLD);

controller.tic();

assertTrue(hw.heaterState());

assertTrue(hw.blowerState());

assertFalse(hw.coolerState());

assertFalse(hw.hiTempAlarm());

assertTrue(hw.loTempAlarm());

}

Page 19: Clean code 單元測試

9.3.2 雙重標準

代碼清單9-4 EnvironmentControllerTest.java(重構後) (操作、驗證)

turn以大寫表示,false以小寫表示,以簡化程式碼。

Page 20: Clean code 單元測試

9.3.2 雙重標準

代碼清單9-5 EnvironmentControllerTest.java(擴大到更大範圍) (操作、驗證)

Page 21: Clean code 單元測試

9.3.2 雙重標準

代碼清單9-6 MockControlHardware.java (構造)

Page 22: Clean code 單元測試

9.4 每個測試一個斷言

每個測試只測試一個概念,像9-8的例子就應該拆成3個測試。

Page 23: Clean code 單元測試

9.5 F.I.R.S.T.整潔的測試遵循以下5個規則

Page 24: Clean code 單元測試

9.5 F.I.R.S.T.整潔的測試遵循以下5個規則

(1)快速(Fast) : 若測試效率差,就會懶得用,懶的用就有可能漏測,且維護程式碼較不易。

Page 25: Clean code 單元測試

9.5 F.I.R.S.T.整潔的測試遵循以下5個規則

(1)快速(Fast) : 若測試效率差,就會懶得用,懶的用就有可能漏測,且維護程式碼較不易。

(2)獨立(Independent) : 當測試相依性高時,頭一個沒過,可能導致後面一拖拉庫失敗,就會 診斷困難。

Page 26: Clean code 單元測試

9.5 F.I.R.S.T.整潔的測試遵循以下5個規則

(1)快速(Fast) : 若測試效率差,就會懶得用,懶的用就有可能漏測,且維護程式碼較不易。

(2)獨立(Independent) : 當測試相依性高時,頭一個沒過,可能導致後面一拖拉庫失敗,就會 診斷困難。

(3)可重複(Repeatable) : 測試應當可在任何環境下重複運行。

Page 27: Clean code 單元測試

9.5 F.I.R.S.T.整潔的測試遵循以下5個規則

(1)快速(Fast) : 若測試效率差,就會懶得用,懶的用就有可能漏測,且維護程式碼較不易。

(2)獨立(Independent) : 當測試相依性高時,頭一個沒過,可能導致後面一拖拉庫失敗,就會 診斷困難。

(3)可重複(Repeatable) : 測試應當可在任何環境下重複運行。

(4)自足驗證(Self-Validating) : 測試應該boolean值輸出,無論通過與否。

Page 28: Clean code 單元測試

9.5 F.I.R.S.T.整潔的測試遵循以下5個規則

(1)快速(Fast) : 若測試效率差,就會懶得用,懶的用就有可能漏測,且維護程式碼較不易。

(2)獨立(Independent) : 當測試相依性高時,頭一個沒過,可能導致後面一拖拉庫失敗,就會 診斷困難。

(3)可重複(Repeatable) : 測試應當可在任何環境下重複運行。

(4)自足驗證(Self-Validating) : 測試應該boolean值輸出,無論通過與否。

(5)及時(Timely) : 測試必須先寫,因為後寫的話,可能會發生某些程式碼難以寫測試,反而更費時 。

Page 29: Clean code 單元測試

9.6 總結

Page 30: Clean code 單元測試

9.6 總結

(1)主要架構依序[構造]、[操作]、[驗證]

Page 31: Clean code 單元測試

9.6 總結

(1)主要架構依序[構造]、[操作]、[驗證]

(2)測試必須先行,因為這樣比較潮

Page 32: Clean code 單元測試

9.6 總結

(1)主要架構依序[構造]、[操作]、[驗證]

(2)測試必須先行,因為這樣比較潮

(3)依照[一個測試只測試一個概念]的原則進行,不要將多個測試寫在一起。

Page 33: Clean code 單元測試

9.6 總結

(1)主要架構依序[構造]、[操作]、[驗證]

(2)測試必須先行,因為這樣比較潮

(3)依照[一個測試只測試一個概念]的原則進行,不要將多個測試寫在一起。

(4)設定團隊準則,這樣相互才看得懂

Page 34: Clean code 單元測試

9.6 總結

(1)主要架構依序[構造]、[操作]、[驗證]

(2)測試必須先行,因為這樣比較潮

(3)依照[一個測試只測試一個概念]的原則進行,不要將多個測試寫在一起。

(4)設定團隊準則,這樣相互才看得懂,方便抄襲XDD