SlideShare a Scribd company logo
1 of 34
Download to read offline
單元測試
測試驅動開發(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

More Related Content

Similar to Clean code 單元測試

打造面向服务的敏捷团队 Q con-beijing2012
打造面向服务的敏捷团队 Q con-beijing2012打造面向服务的敏捷团队 Q con-beijing2012
打造面向服务的敏捷团队 Q con-beijing2012Qiao Liang
 
service-oriented agile team-Q con-beijing2012
service-oriented agile team-Q con-beijing2012service-oriented agile team-Q con-beijing2012
service-oriented agile team-Q con-beijing2012Qiao Liang
 
[DevOpsDays] 硬體產業的DevOps導入與實踐 - 以工控產業為例
[DevOpsDays] 硬體產業的DevOps導入與實踐 - 以工控產業為例[DevOpsDays] 硬體產業的DevOps導入與實踐 - 以工控產業為例
[DevOpsDays] 硬體產業的DevOps導入與實踐 - 以工控產業為例TIM WANG
 
软件工程 第七章
软件工程 第七章软件工程 第七章
软件工程 第七章浒 刘
 
Top100summit 宗刚-全生命周期性能评估体系的实践
Top100summit 宗刚-全生命周期性能评估体系的实践Top100summit 宗刚-全生命周期性能评估体系的实践
Top100summit 宗刚-全生命周期性能评估体系的实践drewz lin
 
twMVC#12 | 如何在實務上使用 TDD 來開發
twMVC#12 | 如何在實務上使用 TDD 來開發twMVC#12 | 如何在實務上使用 TDD 來開發
twMVC#12 | 如何在實務上使用 TDD 來開發twMVC
 
Scrum gathering 2012 shanghai_敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)
Scrum gathering 2012 shanghai_敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)Scrum gathering 2012 shanghai_敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)
Scrum gathering 2012 shanghai_敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)LetAgileFly
 
Scrum gathering 2012 shanghai_ 敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)
Scrum gathering 2012 shanghai_ 敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)Scrum gathering 2012 shanghai_ 敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)
Scrum gathering 2012 shanghai_ 敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)jalamar
 
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12twMVC
 
前端单元测试
前端单元测试前端单元测试
前端单元测试LC2009
 
The way to continuous delivery
The way to continuous deliveryThe way to continuous delivery
The way to continuous deliveryQiao Liang
 
Introduction to software quality assurance and its implementation
Introduction to software quality assurance and its implementationIntroduction to software quality assurance and its implementation
Introduction to software quality assurance and its implementationYung-Chun Chang
 
Nhibernate+sqlite測試實戰經驗分享
Nhibernate+sqlite測試實戰經驗分享Nhibernate+sqlite測試實戰經驗分享
Nhibernate+sqlite測試實戰經驗分享Wade Huang
 
有效的单元测试.ppt
有效的单元测试.ppt有效的单元测试.ppt
有效的单元测试.ppttest499702
 
Web testing automation
Web testing automationWeb testing automation
Web testing automationkuozui
 
测试快照
测试快照测试快照
测试快照jacquesqj
 

Similar to Clean code 單元測試 (20)

打造面向服务的敏捷团队 Q con-beijing2012
打造面向服务的敏捷团队 Q con-beijing2012打造面向服务的敏捷团队 Q con-beijing2012
打造面向服务的敏捷团队 Q con-beijing2012
 
service-oriented agile team-Q con-beijing2012
service-oriented agile team-Q con-beijing2012service-oriented agile team-Q con-beijing2012
service-oriented agile team-Q con-beijing2012
 
[DevOpsDays] 硬體產業的DevOps導入與實踐 - 以工控產業為例
[DevOpsDays] 硬體產業的DevOps導入與實踐 - 以工控產業為例[DevOpsDays] 硬體產業的DevOps導入與實踐 - 以工控產業為例
[DevOpsDays] 硬體產業的DevOps導入與實踐 - 以工控產業為例
 
软件工程 第七章
软件工程 第七章软件工程 第七章
软件工程 第七章
 
jasmine入门指南
jasmine入门指南jasmine入门指南
jasmine入门指南
 
Unit test
Unit testUnit test
Unit test
 
Xpp
XppXpp
Xpp
 
Top100summit 宗刚-全生命周期性能评估体系的实践
Top100summit 宗刚-全生命周期性能评估体系的实践Top100summit 宗刚-全生命周期性能评估体系的实践
Top100summit 宗刚-全生命周期性能评估体系的实践
 
twMVC#12 | 如何在實務上使用 TDD 來開發
twMVC#12 | 如何在實務上使用 TDD 來開發twMVC#12 | 如何在實務上使用 TDD 來開發
twMVC#12 | 如何在實務上使用 TDD 來開發
 
Scrum gathering 2012 shanghai_敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)
Scrum gathering 2012 shanghai_敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)Scrum gathering 2012 shanghai_敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)
Scrum gathering 2012 shanghai_敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)
 
Scrum gathering 2012 shanghai_ 敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)
Scrum gathering 2012 shanghai_ 敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)Scrum gathering 2012 shanghai_ 敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)
Scrum gathering 2012 shanghai_ 敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)
 
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
 
前端单元测试
前端单元测试前端单元测试
前端单元测试
 
The way to continuous delivery
The way to continuous deliveryThe way to continuous delivery
The way to continuous delivery
 
Introduction to software quality assurance and its implementation
Introduction to software quality assurance and its implementationIntroduction to software quality assurance and its implementation
Introduction to software quality assurance and its implementation
 
Nhibernate+sqlite測試實戰經驗分享
Nhibernate+sqlite測試實戰經驗分享Nhibernate+sqlite測試實戰經驗分享
Nhibernate+sqlite測試實戰經驗分享
 
有效的单元测试.ppt
有效的单元测试.ppt有效的单元测试.ppt
有效的单元测试.ppt
 
Web testing automation
Web testing automationWeb testing automation
Web testing automation
 
PHP 单元测试
PHP 单元测试PHP 单元测试
PHP 单元测试
 
测试快照
测试快照测试快照
测试快照
 

More from HopenglishRD

人月神話Ch.13 整體部分 Ch.14 禍起蕭牆
人月神話Ch.13 整體部分 Ch.14 禍起蕭牆人月神話Ch.13 整體部分 Ch.14 禍起蕭牆
人月神話Ch.13 整體部分 Ch.14 禍起蕭牆HopenglishRD
 
人月神話 - 未雨綢繆&干將莫邪
人月神話 - 未雨綢繆&干將莫邪人月神話 - 未雨綢繆&干將莫邪
人月神話 - 未雨綢繆&干將莫邪HopenglishRD
 
人月神話_畫蛇添足&貫徹執行
人月神話_畫蛇添足&貫徹執行人月神話_畫蛇添足&貫徹執行
人月神話_畫蛇添足&貫徹執行HopenglishRD
 
Jira實用(一)
Jira實用(一)Jira實用(一)
Jira實用(一)HopenglishRD
 
猴子也能懂的Node.js
猴子也能懂的Node.js猴子也能懂的Node.js
猴子也能懂的Node.jsHopenglishRD
 
20160809 希平方研發部分享 selenium自動化測試簡介
20160809 希平方研發部分享 selenium自動化測試簡介20160809 希平方研發部分享 selenium自動化測試簡介
20160809 希平方研發部分享 selenium自動化測試簡介HopenglishRD
 

More from HopenglishRD (6)

人月神話Ch.13 整體部分 Ch.14 禍起蕭牆
人月神話Ch.13 整體部分 Ch.14 禍起蕭牆人月神話Ch.13 整體部分 Ch.14 禍起蕭牆
人月神話Ch.13 整體部分 Ch.14 禍起蕭牆
 
人月神話 - 未雨綢繆&干將莫邪
人月神話 - 未雨綢繆&干將莫邪人月神話 - 未雨綢繆&干將莫邪
人月神話 - 未雨綢繆&干將莫邪
 
人月神話_畫蛇添足&貫徹執行
人月神話_畫蛇添足&貫徹執行人月神話_畫蛇添足&貫徹執行
人月神話_畫蛇添足&貫徹執行
 
Jira實用(一)
Jira實用(一)Jira實用(一)
Jira實用(一)
 
猴子也能懂的Node.js
猴子也能懂的Node.js猴子也能懂的Node.js
猴子也能懂的Node.js
 
20160809 希平方研發部分享 selenium自動化測試簡介
20160809 希平方研發部分享 selenium自動化測試簡介20160809 希平方研發部分享 selenium自動化測試簡介
20160809 希平方研發部分享 selenium自動化測試簡介
 

Clean code 單元測試