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

Clean code 單元測試

Apr 16, 2017

Download

Design

HopenglishRD
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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