Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

Da5dec3f0447a582c1f9d650edbe0142?s=47 twMVC
November 30, 2013

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

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

IoC
Unit testing
Web UI testing
BDD

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

by twMVC http://mvc.tw

Da5dec3f0447a582c1f9d650edbe0142?s=128

twMVC

November 30, 2013
Tweet

Transcript

  1. 如何在實務上使用TDD來開發 Joey Chen(91)

  2.  Microsoft MVP 2010~2013  C#  共同作者, 書籍譯者 

    軟體工程, 測試, 重構, CI, TDD, BDD… 2 About 91
  3. None
  4. None
  5. None
  6. None
  7. None
  8. None
  9. None
  10. None
  11. None
  12. None
  13. None
  14. None
  15. None
  16. None
  17. None
  18. None
  19. None
  20.  Web UI Testing  Refactoring  Unit Testing 

    BDD  Interface  第一式打到最後一式 20 Agenda
  21. None
  22. 22

  23. None
  24. None
  25. None
  26. None
  27. None
  28. None
  29. None
  30. None
  31. None
  32. None
  33.  Record Scenarios  Replay and Assert  Export to

    C#  Auto testing in C# Demo 33
  34. Demo – Selenium IDE & C#

  35.  Selenium IDE  [Selenium IDE]Export to C#/WebDriver/MSTest  NuGet

     Selenium WebDriver  Selenium WebDriver Support Classes Reference 35
  36. None
  37. None
  38. None
  39. None
  40. Demo – Extract Method

  41. None
  42. None
  43. None
  44. Demo – 建立Class

  45. None
  46. None
  47. None
  48. None
  49. None
  50. None
  51. None
  52. None
  53. None
  54. None
  55. Demo – 單元測試

  56. None
  57. None
  58. None
  59. Visual Studio Extension

  60. NuGet

  61. App.Config <unitTestProvider name="MsTest" />

  62. Scenarios

  63. None
  64. None
  65. None
  66. Demo – Specflow

  67.  Specflow  Specflow Visual Studio Extension  NuGet 

    Specflow Reference 67
  68. None
  69. None
  70. None
  71. None
  72. Demo – Extract Interface

  73.  Web UI testing (acceptance testing)  Unit testing 

    Test cases by scenarios  Depend on interface Recap 73
  74. None
  75. PO:

  76. None
  77. Team:

  78. PO:

  79. PO:

  80. Team:

  81.  帳號輸入 joey  密碼輸入 1234  登入成功  導到首頁

    ~/Home/Index PO & team – 登入成功 81
  82.  帳號輸入 joey  密碼輸入 abc  登入失敗  呈現錯誤訊息為

    “帳號或密碼有誤” PO & team – 登入失敗 82
  83. Team:

  84. Demo – Prototype confirm

  85. PO:

  86. None
  87. None
  88. Demo – Describe Scenarios

  89. None
  90. None
  91. None
  92. None
  93. Demo – Selenium testing

  94. None
  95.  Account 傳入 joey  Password 傳入 1234  結果

     Controller 應為 Home  Action 應為 Index 登入成功 95
  96.  Account 傳入 joey  Password 傳入 abc  結果

     ViewBag.Message 為帳號或密碼有誤 登入失敗 96
  97. Demo – Controller’s testing

  98. None
  99. None
  100. None
  101. None
  102. Mock framework - RhinoMocks

  103. RhinoMocks

  104. RhinoMocks

  105. Demo – IoC & Stub

  106. Mock framework

  107. Without DI

  108. DI framework – Unity.MVC4

  109. Container.RegisterType<TFrom,TTo>

  110. Demo – DI & MyAuthentication

  111. None
  112. Get Password from Data Source

  113. Hash Password to Compare

  114. None
  115.  IAccountDao的GetPassword方法,傳入”joey”,回傳 “Joey hashed password”  IHash的GetHashResult方法,傳入”1234”,回傳“Joey hashed password” 

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

    結果  False IAccountDao回傳與IHash結果不同 116
  117. Demo – MyAuthentication BDD

  118. None
  119. 實作 IAccountDao

  120. MyAccountDao with hard-code

  121. 實作 IHash

  122. MyHash with hard-code

  123. Container.RegisterType

  124. Demo – MyAccountDao & MyHash

  125. None
  126. None
  127. None
  128. 需求 雛形 Selenium Test Controller Test

  129. IAuthentication DI with MyAuthentication Controller Test

  130. IAccountDao IHash DI with MyAuthentication MyAuthentication Testing

  131. MyAccountDao MyAuthentication Testing MyHash

  132. None
  133. None
  134. None
  135. None
  136. 你也可以!

  137. Q & A Thanks for your listening 137

  138. 謝謝各位 • 本投影片所包含的商標與文字皆屬原著作者所有。 • 本投影片使用的圖片皆從網路搜尋。 • 本著作係採用 Creative Commons 姓名標示-非商業性-相同方式分享

    3.0 台灣 (中華民國) 授權條款授權。 h t t p : / / m v c . t w