SlideShare a Scribd company logo
1 of 138
Download to read offline
如何在實務上使用TDD來開發
Joey Chen(91)
About 91
 Microsoft MVP 2010~2013
 C#
 共同作者, 書籍譯者
 軟體工程, 測試, 重構, CI, TDD, BDD…

2
Agenda
 Web UI Testing
 Refactoring
 Unit Testing
 BDD
 Interface
 第一式打到最後一式

20
22
Demo
 Record Scenarios
 Replay and Assert
 Export to C#
 Auto testing in C#

33
Demo – Selenium IDE & C#
Reference
 Selenium IDE
 [Selenium IDE]Export to C#/WebDriver/MSTest
 NuGet
 Selenium WebDriver
 Selenium WebDriver Support Classes

35
Demo – Extract Method
Demo – 建立Class
Demo – 單元測試
Visual Studio Extension
NuGet
App.Config

<unitTestProvider name="MsTest" />
Scenarios
Demo – Specflow
Reference
 Specflow
 Specflow Visual Studio Extension
 NuGet
 Specflow

67
Demo – Extract Interface
Recap
 Web UI testing (acceptance testing)
 Unit testing
 Test cases by scenarios
 Depend on interface

73
PO:
Team:
PO:
PO:
Team:
PO & team – 登入成功
 帳號輸入 joey
 密碼輸入 1234
 登入成功
 導到首頁 ~/Home/Index

81
PO & team – 登入失敗
 帳號輸入 joey
 密碼輸入 abc
 登入失敗
 呈現錯誤訊息為 “帳號或密碼有誤”

82
Team:
Demo – Prototype confirm
PO:
Demo – Describe Scenarios
Demo – Selenium testing
登入成功
 Account 傳入 joey
 Password 傳入 1234
 結果
 Controller 應為 Home
 Action 應為 Index

95
登入失敗
 Account 傳入 joey
 Password 傳入 abc
 結果
 ViewBag.Message 為帳號或密碼有誤

96
Demo – Controller’s testing
Mock framework - RhinoMocks
RhinoMocks
RhinoMocks
Demo – IoC & Stub
Mock framework
Without DI
DI framework – Unity.MVC4
Container.RegisterType<TFrom,TTo>
Demo – DI & MyAuthentication
Get Password from Data Source
Hash Password to Compare
IAccountDao回傳與IHash結果相同
 IAccountDao的GetPassword方法,傳入”joey”,回傳
“Joey hashed password”
 IHash的GetHashResult方法,傳入”1234”,回傳“Joey
hashed password”
 結果
 True

115
IAccountDao回傳與IHash結果不同
 IAccountDao的GetPassword方法,傳入”joey”,回傳
“Joey hashed password”
 IHash的GetHashResult方法,傳入”abc”,回傳“abc
hashed result”
 結果
 False

116
Demo – MyAuthentication BDD
實作 IAccountDao
MyAccountDao with hard-code
實作 IHash
MyHash with hard-code
Container.RegisterType
Demo – MyAccountDao & MyHash
需求
雛形
Selenium
Test
Controller
Test
Controller
Test

IAuthentication

DI with
MyAuthentication
DI with
MyAuthentication

IAccountDao
IHash
MyAuthentication
Testing
MyAuthentication
Testing

MyAccountDao

MyHash
你也可以!
Q & A
Thanks for your listening

137
謝謝各位
http://mvc.tw

•
•
•

本投影片所包含的商標與文字皆屬原著作者所有。
本投影片使用的圖片皆從網路搜尋。
本著作係採用 Creative Commons 姓名標示-非商業性-相同方式分享 3.0 台灣 (中華民國) 授權條款授權。

More Related Content

What's hot

What's hot (19)

專案分層架構 twMVC#18
專案分層架構 twMVC#18專案分層架構 twMVC#18
專案分層架構 twMVC#18
 
動手打造 application framework-twMVC#15
動手打造 application framework-twMVC#15動手打造 application framework-twMVC#15
動手打造 application framework-twMVC#15
 
twMVC#20 | ASP.NET MVC View 開發技巧小錦囊
twMVC#20 | ASP.NET MVC View 開發技巧小錦囊twMVC#20 | ASP.NET MVC View 開發技巧小錦囊
twMVC#20 | ASP.NET MVC View 開發技巧小錦囊
 
twMVC#29 -Learning Machine Learning with Movie Recommendation
twMVC#29 -Learning Machine Learning with Movie RecommendationtwMVC#29 -Learning Machine Learning with Movie Recommendation
twMVC#29 -Learning Machine Learning with Movie Recommendation
 
twMVC#22 | 什麼鬼的IOC與DI
twMVC#22 | 什麼鬼的IOC與DItwMVC#22 | 什麼鬼的IOC與DI
twMVC#22 | 什麼鬼的IOC與DI
 
開發的效能與效率-twMVC#15
開發的效能與效率-twMVC#15開發的效能與效率-twMVC#15
開發的效能與效率-twMVC#15
 
twMVC#22 | 一個微信專案從0到.000的效能調教之路
twMVC#22 | 一個微信專案從0到.000的效能調教之路twMVC#22 | 一個微信專案從0到.000的效能調教之路
twMVC#22 | 一個微信專案從0到.000的效能調教之路
 
twMVC#23 | 一個Mobile App開發、維護與改版的愛恨之路
twMVC#23 | 一個Mobile App開發、維護與改版的愛恨之路twMVC#23 | 一個Mobile App開發、維護與改版的愛恨之路
twMVC#23 | 一個Mobile App開發、維護與改版的愛恨之路
 
MVC實戰分享 分頁與排序相關技巧-tw mvc#13
MVC實戰分享 分頁與排序相關技巧-tw mvc#13MVC實戰分享 分頁與排序相關技巧-tw mvc#13
MVC實戰分享 分頁與排序相關技巧-tw mvc#13
 
twMVC#29 | 當.Net Core 遇到AWS Lambda
twMVC#29 | 當.Net Core 遇到AWS LambdatwMVC#29 | 當.Net Core 遇到AWS Lambda
twMVC#29 | 當.Net Core 遇到AWS Lambda
 
twMVC#19 | opserver監控服務的解決
twMVC#19 | opserver監控服務的解決twMVC#19 | opserver監控服務的解決
twMVC#19 | opserver監控服務的解決
 
Angular js twmvc#17
Angular js twmvc#17Angular js twmvc#17
Angular js twmvc#17
 
twMVC#21 | 以實例說明ASP.NET Web API 服務的開發與測試過程
twMVC#21 | 以實例說明ASP.NET Web API 服務的開發與測試過程twMVC#21 | 以實例說明ASP.NET Web API 服務的開發與測試過程
twMVC#21 | 以實例說明ASP.NET Web API 服務的開發與測試過程
 
Asp.net mvc 從無到有 -twMVC#2
Asp.net mvc 從無到有 -twMVC#2Asp.net mvc 從無到有 -twMVC#2
Asp.net mvc 從無到有 -twMVC#2
 
twMVC#31沒有 hdd 的網站重構 webform to mvc
twMVC#31沒有 hdd 的網站重構 webform to mvctwMVC#31沒有 hdd 的網站重構 webform to mvc
twMVC#31沒有 hdd 的網站重構 webform to mvc
 
ASP.NET MVC 善用網路資源快速完打造網站
ASP.NET MVC 善用網路資源快速完打造網站ASP.NET MVC 善用網路資源快速完打造網站
ASP.NET MVC 善用網路資源快速完打造網站
 
twMVC#19 | 微信公眾平台申請與wechat api 開發血淚史
twMVC#19 | 微信公眾平台申請與wechat api 開發血淚史twMVC#19 | 微信公眾平台申請與wechat api 開發血淚史
twMVC#19 | 微信公眾平台申請與wechat api 開發血淚史
 
架構設計入門 twMVC#11
架構設計入門 twMVC#11架構設計入門 twMVC#11
架構設計入門 twMVC#11
 
ASP.NET MVC Model 的設計與使用 twMVC#10
ASP.NET MVC Model 的設計與使用 twMVC#10ASP.NET MVC Model 的設計與使用 twMVC#10
ASP.NET MVC Model 的設計與使用 twMVC#10
 

Similar to 如何在實務上使用TDD來開發 twmvc#12

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
Qiao Liang
 
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Gelis Wu
 
zhuwenlongChinese
zhuwenlongChinesezhuwenlongChinese
zhuwenlongChinese
Wenlong Zhu
 
C#语言与面向对象程序设计
C#语言与面向对象程序设计C#语言与面向对象程序设计
C#语言与面向对象程序设计
WizRay
 
2014/02: 嵌入式測試驅動開發
2014/02: 嵌入式測試驅動開發2014/02: 嵌入式測試驅動開發
2014/02: 嵌入式測試驅動開發
AgileCommunity
 
Top100summit automan x之框架介绍 王超
Top100summit automan x之框架介绍 王超Top100summit automan x之框架介绍 王超
Top100summit automan x之框架介绍 王超
drewz lin
 
Continuous integration
Continuous integrationContinuous integration
Continuous integration
netdbncku
 

Similar to 如何在實務上使用TDD來開發 twmvc#12 (20)

twMVC#12 | 如何在實務上使用 TDD 來開發
twMVC#12 | 如何在實務上使用 TDD 來開發twMVC#12 | 如何在實務上使用 TDD 來開發
twMVC#12 | 如何在實務上使用 TDD 來開發
 
Web testing automation
Web testing automationWeb testing automation
Web testing automation
 
打造面向服务的敏捷团队 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
 
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
 
zhuwenlongChinese
zhuwenlongChinesezhuwenlongChinese
zhuwenlongChinese
 
PHP 单元测试
PHP 单元测试PHP 单元测试
PHP 单元测试
 
C#语言与面向对象程序设计
C#语言与面向对象程序设计C#语言与面向对象程序设计
C#语言与面向对象程序设计
 
The way to continuous delivery
The way to continuous deliveryThe way to continuous delivery
The way to continuous delivery
 
Unit test
Unit testUnit test
Unit test
 
[DevOpsDays] 硬體產業的DevOps導入與實踐 - 以工控產業為例
[DevOpsDays] 硬體產業的DevOps導入與實踐 - 以工控產業為例[DevOpsDays] 硬體產業的DevOps導入與實踐 - 以工控產業為例
[DevOpsDays] 硬體產業的DevOps導入與實踐 - 以工控產業為例
 
用 Drone 打造 輕量級容器持續交付平台
用 Drone 打造輕量級容器持續交付平台用 Drone 打造輕量級容器持續交付平台
用 Drone 打造 輕量級容器持續交付平台
 
2014/02: 嵌入式測試驅動開發
2014/02: 嵌入式測試驅動開發2014/02: 嵌入式測試驅動開發
2014/02: 嵌入式測試驅動開發
 
嵌入式測試驅動開發
嵌入式測試驅動開發嵌入式測試驅動開發
嵌入式測試驅動開發
 
在B2B硬體產業運用 Agile 與 DevOps 的實務與心法
在B2B硬體產業運用 Agile 與 DevOps 的實務與心法在B2B硬體產業運用 Agile 與 DevOps 的實務與心法
在B2B硬體產業運用 Agile 與 DevOps 的實務與心法
 
Top100summit automan x之框架介绍 王超
Top100summit automan x之框架介绍 王超Top100summit automan x之框架介绍 王超
Top100summit automan x之框架介绍 王超
 
Xpp
XppXpp
Xpp
 
Continuous integration
Continuous integrationContinuous integration
Continuous integration
 
twMVC#06 | Wiindows市集應用程式 開發心得分享
twMVC#06 | Wiindows市集應用程式 開發心得分享twMVC#06 | Wiindows市集應用程式 開發心得分享
twMVC#06 | Wiindows市集應用程式 開發心得分享
 
Windows 市集應用程式 開發心得分享 -twMVC#6
Windows 市集應用程式 開發心得分享 -twMVC#6Windows 市集應用程式 開發心得分享 -twMVC#6
Windows 市集應用程式 開發心得分享 -twMVC#6
 

More from twMVC

樞紐分析表之數據分析與統計-twMV#C14
樞紐分析表之數據分析與統計-twMV#C14樞紐分析表之數據分析與統計-twMV#C14
樞紐分析表之數據分析與統計-twMV#C14
twMVC
 
20130823微軟雲端平台開發者日
20130823微軟雲端平台開發者日20130823微軟雲端平台開發者日
20130823微軟雲端平台開發者日
twMVC
 

More from twMVC (18)

雲端上的資訊安全-Global Azure Bootcamp 2015 臺北場
雲端上的資訊安全-Global Azure Bootcamp 2015 臺北場雲端上的資訊安全-Global Azure Bootcamp 2015 臺北場
雲端上的資訊安全-Global Azure Bootcamp 2015 臺北場
 
雲端環境的快取策略-Global Azure Bootcamp 2015 臺北場
雲端環境的快取策略-Global Azure Bootcamp 2015 臺北場雲端環境的快取策略-Global Azure Bootcamp 2015 臺北場
雲端環境的快取策略-Global Azure Bootcamp 2015 臺北場
 
讓應用程式雲端化 由 Iaa s 邁向 paas 之路-Global Azure Bootcamp 2015 臺北場
讓應用程式雲端化 由 Iaa s 邁向 paas 之路-Global Azure Bootcamp 2015 臺北場讓應用程式雲端化 由 Iaa s 邁向 paas 之路-Global Azure Bootcamp 2015 臺北場
讓應用程式雲端化 由 Iaa s 邁向 paas 之路-Global Azure Bootcamp 2015 臺北場
 
線上遊戲利用 Dev ops 開源工具 chef, docker, vagrant 在microsoft azure 的佈署實踐-Global Azure...
線上遊戲利用 Dev ops 開源工具 chef, docker, vagrant 在microsoft azure 的佈署實踐-Global Azure...線上遊戲利用 Dev ops 開源工具 chef, docker, vagrant 在microsoft azure 的佈署實踐-Global Azure...
線上遊戲利用 Dev ops 開源工具 chef, docker, vagrant 在microsoft azure 的佈署實踐-Global Azure...
 
Azure mobileservice
Azure mobileservice Azure mobileservice
Azure mobileservice
 
SignalR實戰技巧 twmvc#17
SignalR實戰技巧 twmvc#17 SignalR實戰技巧 twmvc#17
SignalR實戰技巧 twmvc#17
 
TypeScript-twmvc#16
TypeScript-twmvc#16TypeScript-twmvc#16
TypeScript-twmvc#16
 
前端工程師與室內裝修師傅的相似之處-twMVC#16
前端工程師與室內裝修師傅的相似之處-twMVC#16前端工程師與室內裝修師傅的相似之處-twMVC#16
前端工程師與室內裝修師傅的相似之處-twMVC#16
 
樞紐分析表之數據分析與統計-twMV#C14
樞紐分析表之數據分析與統計-twMV#C14樞紐分析表之數據分析與統計-twMV#C14
樞紐分析表之數據分析與統計-twMV#C14
 
RWD不是你想的那樣 tw mvc#13
RWD不是你想的那樣 tw mvc#13RWD不是你想的那樣 tw mvc#13
RWD不是你想的那樣 tw mvc#13
 
Knockout 從零開始,實戰教學 twMVC#10
Knockout 從零開始,實戰教學 twMVC#10Knockout 從零開始,實戰教學 twMVC#10
Knockout 從零開始,實戰教學 twMVC#10
 
20130823微軟雲端平台開發者日
20130823微軟雲端平台開發者日20130823微軟雲端平台開發者日
20130823微軟雲端平台開發者日
 
NFC近場通訊-twMVC#9
NFC近場通訊-twMVC#9NFC近場通訊-twMVC#9
NFC近場通訊-twMVC#9
 
AngularJS 開發 ASP.NET MVC -twMVC#9
AngularJS 開發 ASP.NET MVC -twMVC#9AngularJS 開發 ASP.NET MVC -twMVC#9
AngularJS 開發 ASP.NET MVC -twMVC#9
 
使用 ASP.NET MVC 開發SPA網站-微軟實戰課程日
使用 ASP.NET MVC 開發SPA網站-微軟實戰課程日使用 ASP.NET MVC 開發SPA網站-微軟實戰課程日
使用 ASP.NET MVC 開發SPA網站-微軟實戰課程日
 
ASP.NET MVC Web API -twMVC#8
ASP.NET MVC Web API -twMVC#8ASP.NET MVC Web API -twMVC#8
ASP.NET MVC Web API -twMVC#8
 
超。光速 網站最佳化實戰 -twMVC#8
超。光速 網站最佳化實戰 -twMVC#8超。光速 網站最佳化實戰 -twMVC#8
超。光速 網站最佳化實戰 -twMVC#8
 
透過測試提升軟體品質 - twMVC#7
透過測試提升軟體品質 - twMVC#7透過測試提升軟體品質 - twMVC#7
透過測試提升軟體品質 - twMVC#7
 

如何在實務上使用TDD來開發 twmvc#12