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

2
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
Agenda
 Web UI Testing
 Refactoring
 Unit Testing
 BDD
 Interface
 第一式打到最後一式

20
如何在實務上使用TDD來開發 twmvc#12
22
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
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
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
Demo – Extract Method
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
Demo – 建立Class
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
Demo – 單元測試
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
Visual Studio Extension
NuGet
App.Config

<unitTestProvider name="MsTest" />
Scenarios
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
Demo – Specflow
Reference
 Specflow
 Specflow Visual Studio Extension
 NuGet
 Specflow

67
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
Demo – Extract Interface
Recap
 Web UI testing (acceptance testing)
 Unit testing
 Test cases by scenarios
 Depend on interface

73
如何在實務上使用TDD來開發 twmvc#12
PO:
如何在實務上使用TDD來開發 twmvc#12
Team:
PO:
PO:
Team:
PO & team – 登入成功
 帳號輸入 joey
 密碼輸入 1234
 登入成功
 導到首頁 ~/Home/Index

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

82
Team:
Demo – Prototype confirm
PO:
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
Demo – Describe Scenarios
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
Demo – Selenium testing
如何在實務上使用TDD來開發 twmvc#12
登入成功
 Account 傳入 joey
 Password 傳入 1234
 結果
 Controller 應為 Home
 Action 應為 Index

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

96
Demo – Controller’s testing
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
Mock framework - RhinoMocks
RhinoMocks
RhinoMocks
Demo – IoC & Stub
Mock framework
Without DI
DI framework – Unity.MVC4
Container.RegisterType<TFrom,TTo>
Demo – DI & MyAuthentication
如何在實務上使用TDD來開發 twmvc#12
Get Password from Data Source
Hash Password to Compare
如何在實務上使用TDD來開發 twmvc#12
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
如何在實務上使用TDD來開發 twmvc#12
實作 IAccountDao
MyAccountDao with hard-code
實作 IHash
MyHash with hard-code
Container.RegisterType
Demo – MyAccountDao & MyHash
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
需求
雛形
Selenium
Test
Controller
Test
Controller
Test

IAuthentication

DI with
MyAuthentication
DI with
MyAuthentication

IAccountDao
IHash
MyAuthentication
Testing
MyAuthentication
Testing

MyAccountDao

MyHash
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
你也可以!
Q & A
Thanks for your listening

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

•
•
•

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

More Related Content

PDF
Vs2013新功能介紹 twMVC#11
PDF
twMVC#24 | 開發團隊的敏捷之路(未完成)
PDF
twMVC#25 | ASP.NET MVC A/B Testing 的眉眉角角
PDF
輕鬆上手Asp.net web api 2.1-twMVC#14
PDF
twMVC#28 | visual studio 2017 新功能介紹
PDF
twMVC#21 | 你所不知道的 Visual Studio
PDF
twMVC#23 | 快速上手 Azure Functions
PDF
一小時可以打造什麼服務Plus twMVC#18
Vs2013新功能介紹 twMVC#11
twMVC#24 | 開發團隊的敏捷之路(未完成)
twMVC#25 | ASP.NET MVC A/B Testing 的眉眉角角
輕鬆上手Asp.net web api 2.1-twMVC#14
twMVC#28 | visual studio 2017 新功能介紹
twMVC#21 | 你所不知道的 Visual Studio
twMVC#23 | 快速上手 Azure Functions
一小時可以打造什麼服務Plus twMVC#18

What's hot (19)

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

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

PDF
twMVC#12 | 如何在實務上使用 TDD 來開發
PPTX
單元測試介紹
PDF
BDD in .NET
PDF
認試軟體測試的世界 & TDD/BDD 入門
PPTX
我的BDD實踐
PDF
Bdd atdd sbe_tdd_ddd_published
twMVC#12 | 如何在實務上使用 TDD 來開發
單元測試介紹
BDD in .NET
認試軟體測試的世界 & TDD/BDD 入門
我的BDD實踐
Bdd atdd sbe_tdd_ddd_published
Ad

More from twMVC (19)

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

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