如何在實務上使用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 S...
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”,回傳...
IAccountDao回傳與IHash結果不同
 IAccountDao的GetPassword方法,傳入”joey”,回傳
“Joey hashed password”
 IHash的GetHashResult方法,傳入”abc”,回傳“...
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 台灣 (中華民國) ...
如何在實務上使用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
如何在實務上使用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
如何在實務上使用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
如何在實務上使用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
如何在實務上使用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
Upcoming SlideShare
Loading in …5
×

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

1,148 views

Published on

TDD 貌似不難,但在實務上能推行與貫徹的團隊卻是少之又少,甚至被視為是一種不切實際的開發方式。在這次分享中,將搭配 demo 來介紹幾個貫徹 TDD 所需要的重要概念,
包含:

IoC
Unit testing
Web UI testing
BDD


期望讓大家在未來的工作上,也可以透過 TDD 快樂地開發。

by twMVC http://mvc.tw

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

  1. 1. 如何在實務上使用TDD來開發 Joey Chen(91)
  2. 2. About 91  Microsoft MVP 2010~2013  C#  共同作者, 書籍譯者  軟體工程, 測試, 重構, CI, TDD, BDD… 2
  3. 3. Agenda  Web UI Testing  Refactoring  Unit Testing  BDD  Interface  第一式打到最後一式 20
  4. 4. 22
  5. 5. Demo  Record Scenarios  Replay and Assert  Export to C#  Auto testing in C# 33
  6. 6. Demo – Selenium IDE & C#
  7. 7. Reference  Selenium IDE  [Selenium IDE]Export to C#/WebDriver/MSTest  NuGet  Selenium WebDriver  Selenium WebDriver Support Classes 35
  8. 8. Demo – Extract Method
  9. 9. Demo – 建立Class
  10. 10. Demo – 單元測試
  11. 11. Visual Studio Extension
  12. 12. NuGet
  13. 13. App.Config <unitTestProvider name="MsTest" />
  14. 14. Scenarios
  15. 15. Demo – Specflow
  16. 16. Reference  Specflow  Specflow Visual Studio Extension  NuGet  Specflow 67
  17. 17. Demo – Extract Interface
  18. 18. Recap  Web UI testing (acceptance testing)  Unit testing  Test cases by scenarios  Depend on interface 73
  19. 19. PO:
  20. 20. Team:
  21. 21. PO:
  22. 22. PO:
  23. 23. Team:
  24. 24. PO & team – 登入成功  帳號輸入 joey  密碼輸入 1234  登入成功  導到首頁 ~/Home/Index 81
  25. 25. PO & team – 登入失敗  帳號輸入 joey  密碼輸入 abc  登入失敗  呈現錯誤訊息為 “帳號或密碼有誤” 82
  26. 26. Team:
  27. 27. Demo – Prototype confirm
  28. 28. PO:
  29. 29. Demo – Describe Scenarios
  30. 30. Demo – Selenium testing
  31. 31. 登入成功  Account 傳入 joey  Password 傳入 1234  結果  Controller 應為 Home  Action 應為 Index 95
  32. 32. 登入失敗  Account 傳入 joey  Password 傳入 abc  結果  ViewBag.Message 為帳號或密碼有誤 96
  33. 33. Demo – Controller’s testing
  34. 34. Mock framework - RhinoMocks
  35. 35. RhinoMocks
  36. 36. RhinoMocks
  37. 37. Demo – IoC & Stub
  38. 38. Mock framework
  39. 39. Without DI
  40. 40. DI framework – Unity.MVC4
  41. 41. Container.RegisterType<TFrom,TTo>
  42. 42. Demo – DI & MyAuthentication
  43. 43. Get Password from Data Source
  44. 44. Hash Password to Compare
  45. 45. IAccountDao回傳與IHash結果相同  IAccountDao的GetPassword方法,傳入”joey”,回傳 “Joey hashed password”  IHash的GetHashResult方法,傳入”1234”,回傳“Joey hashed password”  結果  True 115
  46. 46. IAccountDao回傳與IHash結果不同  IAccountDao的GetPassword方法,傳入”joey”,回傳 “Joey hashed password”  IHash的GetHashResult方法,傳入”abc”,回傳“abc hashed result”  結果  False 116
  47. 47. Demo – MyAuthentication BDD
  48. 48. 實作 IAccountDao
  49. 49. MyAccountDao with hard-code
  50. 50. 實作 IHash
  51. 51. MyHash with hard-code
  52. 52. Container.RegisterType
  53. 53. Demo – MyAccountDao & MyHash
  54. 54. 需求 雛形 Selenium Test Controller Test
  55. 55. Controller Test IAuthentication DI with MyAuthentication
  56. 56. DI with MyAuthentication IAccountDao IHash MyAuthentication Testing
  57. 57. MyAuthentication Testing MyAccountDao MyHash
  58. 58. 你也可以!
  59. 59. Q & A Thanks for your listening 137
  60. 60. 謝謝各位 http://mvc.tw • • • 本投影片所包含的商標與文字皆屬原著作者所有。 本投影片使用的圖片皆從網路搜尋。 本著作係採用 Creative Commons 姓名標示-非商業性-相同方式分享 3.0 台灣 (中華民國) 授權條款授權。

×