Clean code 單元測試

Post on 16-Apr-2017

34 views 0 download

Transcript of Clean code 單元測試

單元測試

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

單元測試

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

9.1 TDD三定律

9.1 TDD三定律

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

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

9.1 TDD三定律

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

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

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

----> 單一性

9.1 TDD三定律

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

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

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

----> 單一性

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

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

9.1 TDD三定律

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

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

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

----> 單一性

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

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

9.2 保持測試的整潔

測試帶來的好處

9.2 保持測試的整潔

測試帶來的好處

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

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

9.2 保持測試的整潔

測試帶來的好處

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

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

(3)提升程式碼復用性

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

9.3 整潔的測試

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

9.3 整潔的測試

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

(1)構造測試數據

9.3 整潔的測試

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

(1)構造測試數據

(2)操作測試數據

9.3 整潔的測試

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

(1)構造測試數據

(2)操作測試數據

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

9.3 整潔的測試

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

(1)構造測試數據

(2)操作測試數據

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

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

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>”);

/*驗證*/

}

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

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

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

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

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

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

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());

}

9.3.2 雙重標準

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

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

9.3.2 雙重標準

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

9.3.2 雙重標準

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

9.4 每個測試一個斷言

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

9.6 總結

9.6 總結

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

9.6 總結

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

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

9.6 總結

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

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

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

9.6 總結

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

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

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

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

9.6 總結

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

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

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

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