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

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

Upload: twmvc

Post on 14-Dec-2014

472 views

Category:

Technology


5 download

DESCRIPTION

TDD 貌似不難,但在實務上能推行與貫徹的團隊卻是少之又少,甚至被視為是一種不切實際的開發方式。在這次分享中,將搭配 demo 來介紹幾個貫徹 TDD 所需要的重要概念, 包含: IoC Unit testing Web UI testing BDD 期望讓大家在未來的工作上,也可以透過 TDD 快樂地開發。 by twMVC http://mvc.tw

TRANSCRIPT

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

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

Joey Chen(91)

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

Microsoft MVP 2010~2013

C#

共同作者, 書籍譯者

軟體工程, 測試, 重構, CI, TDD, BDD…

2

About 91

Page 3: 如何在實務上使用TDD來開發 twmvc#12
Page 4: 如何在實務上使用TDD來開發 twmvc#12
Page 5: 如何在實務上使用TDD來開發 twmvc#12
Page 6: 如何在實務上使用TDD來開發 twmvc#12
Page 7: 如何在實務上使用TDD來開發 twmvc#12
Page 8: 如何在實務上使用TDD來開發 twmvc#12
Page 9: 如何在實務上使用TDD來開發 twmvc#12
Page 10: 如何在實務上使用TDD來開發 twmvc#12
Page 11: 如何在實務上使用TDD來開發 twmvc#12
Page 12: 如何在實務上使用TDD來開發 twmvc#12
Page 13: 如何在實務上使用TDD來開發 twmvc#12
Page 14: 如何在實務上使用TDD來開發 twmvc#12
Page 15: 如何在實務上使用TDD來開發 twmvc#12
Page 16: 如何在實務上使用TDD來開發 twmvc#12
Page 17: 如何在實務上使用TDD來開發 twmvc#12
Page 18: 如何在實務上使用TDD來開發 twmvc#12
Page 19: 如何在實務上使用TDD來開發 twmvc#12
Page 20: 如何在實務上使用TDD來開發 twmvc#12

Web UI Testing

Refactoring

Unit Testing

BDD

Interface

第一式打到最後一式

20

Agenda

Page 21: 如何在實務上使用TDD來開發 twmvc#12
Page 22: 如何在實務上使用TDD來開發 twmvc#12

22

Page 23: 如何在實務上使用TDD來開發 twmvc#12
Page 24: 如何在實務上使用TDD來開發 twmvc#12
Page 25: 如何在實務上使用TDD來開發 twmvc#12
Page 26: 如何在實務上使用TDD來開發 twmvc#12
Page 27: 如何在實務上使用TDD來開發 twmvc#12
Page 28: 如何在實務上使用TDD來開發 twmvc#12
Page 29: 如何在實務上使用TDD來開發 twmvc#12
Page 30: 如何在實務上使用TDD來開發 twmvc#12
Page 31: 如何在實務上使用TDD來開發 twmvc#12
Page 32: 如何在實務上使用TDD來開發 twmvc#12
Page 33: 如何在實務上使用TDD來開發 twmvc#12

Record Scenarios

Replay and Assert

Export to C#

Auto testing in C#

Demo

33

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

Demo – Selenium IDE & C#

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

Selenium IDE

[Selenium IDE]Export to C#/WebDriver/MSTest

NuGet

Selenium WebDriver

Selenium WebDriver Support Classes

Reference

35

Page 36: 如何在實務上使用TDD來開發 twmvc#12
Page 37: 如何在實務上使用TDD來開發 twmvc#12
Page 38: 如何在實務上使用TDD來開發 twmvc#12
Page 39: 如何在實務上使用TDD來開發 twmvc#12
Page 40: 如何在實務上使用TDD來開發 twmvc#12

Demo – Extract Method

Page 41: 如何在實務上使用TDD來開發 twmvc#12
Page 42: 如何在實務上使用TDD來開發 twmvc#12
Page 43: 如何在實務上使用TDD來開發 twmvc#12
Page 44: 如何在實務上使用TDD來開發 twmvc#12

Demo – 建立Class

Page 45: 如何在實務上使用TDD來開發 twmvc#12
Page 46: 如何在實務上使用TDD來開發 twmvc#12
Page 47: 如何在實務上使用TDD來開發 twmvc#12
Page 48: 如何在實務上使用TDD來開發 twmvc#12
Page 49: 如何在實務上使用TDD來開發 twmvc#12
Page 50: 如何在實務上使用TDD來開發 twmvc#12
Page 51: 如何在實務上使用TDD來開發 twmvc#12
Page 52: 如何在實務上使用TDD來開發 twmvc#12
Page 53: 如何在實務上使用TDD來開發 twmvc#12
Page 54: 如何在實務上使用TDD來開發 twmvc#12
Page 55: 如何在實務上使用TDD來開發 twmvc#12

Demo – 單元測試

Page 56: 如何在實務上使用TDD來開發 twmvc#12
Page 57: 如何在實務上使用TDD來開發 twmvc#12
Page 58: 如何在實務上使用TDD來開發 twmvc#12
Page 59: 如何在實務上使用TDD來開發 twmvc#12

Visual Studio Extension

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

NuGet

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

App.Config

<unitTestProvider name="MsTest" />

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

Scenarios

Page 63: 如何在實務上使用TDD來開發 twmvc#12
Page 64: 如何在實務上使用TDD來開發 twmvc#12
Page 65: 如何在實務上使用TDD來開發 twmvc#12
Page 66: 如何在實務上使用TDD來開發 twmvc#12

Demo – Specflow

Page 68: 如何在實務上使用TDD來開發 twmvc#12
Page 69: 如何在實務上使用TDD來開發 twmvc#12
Page 70: 如何在實務上使用TDD來開發 twmvc#12
Page 71: 如何在實務上使用TDD來開發 twmvc#12
Page 72: 如何在實務上使用TDD來開發 twmvc#12

Demo – Extract Interface

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

Web UI testing (acceptance testing)

Unit testing

Test cases by scenarios

Depend on interface

Recap

73

Page 74: 如何在實務上使用TDD來開發 twmvc#12
Page 75: 如何在實務上使用TDD來開發 twmvc#12

PO:

Page 76: 如何在實務上使用TDD來開發 twmvc#12
Page 77: 如何在實務上使用TDD來開發 twmvc#12

Team:

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

PO:

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

PO:

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

Team:

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

帳號輸入 joey

密碼輸入 1234

登入成功

導到首頁 ~/Home/Index

PO & team – 登入成功

81

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

帳號輸入 joey

密碼輸入 abc

登入失敗

呈現錯誤訊息為 “帳號或密碼有誤”

PO & team – 登入失敗

82

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

Team:

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

Demo – Prototype confirm

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

PO:

Page 86: 如何在實務上使用TDD來開發 twmvc#12
Page 87: 如何在實務上使用TDD來開發 twmvc#12
Page 88: 如何在實務上使用TDD來開發 twmvc#12

Demo – Describe Scenarios

Page 89: 如何在實務上使用TDD來開發 twmvc#12
Page 90: 如何在實務上使用TDD來開發 twmvc#12
Page 91: 如何在實務上使用TDD來開發 twmvc#12
Page 92: 如何在實務上使用TDD來開發 twmvc#12
Page 93: 如何在實務上使用TDD來開發 twmvc#12

Demo – Selenium testing

Page 94: 如何在實務上使用TDD來開發 twmvc#12
Page 95: 如何在實務上使用TDD來開發 twmvc#12

Account 傳入 joey

Password 傳入 1234

結果

Controller 應為 Home

Action 應為 Index

登入成功

95

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

Account 傳入 joey

Password 傳入 abc

結果

ViewBag.Message 為帳號或密碼有誤

登入失敗

96

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

Demo – Controller’s testing

Page 98: 如何在實務上使用TDD來開發 twmvc#12
Page 99: 如何在實務上使用TDD來開發 twmvc#12
Page 100: 如何在實務上使用TDD來開發 twmvc#12
Page 101: 如何在實務上使用TDD來開發 twmvc#12
Page 102: 如何在實務上使用TDD來開發 twmvc#12

Mock framework - RhinoMocks

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

RhinoMocks

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

RhinoMocks

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

Demo – IoC & Stub

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

Mock framework

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

Without DI

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

DI framework – Unity.MVC4

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

Container.RegisterType<TFrom,TTo>

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

Demo – DI & MyAuthentication

Page 111: 如何在實務上使用TDD來開發 twmvc#12
Page 112: 如何在實務上使用TDD來開發 twmvc#12

Get Password from Data Source

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

Hash Password to Compare

Page 114: 如何在實務上使用TDD來開發 twmvc#12
Page 115: 如何在實務上使用TDD來開發 twmvc#12

IAccountDao的GetPassword方法,傳入”joey”,回傳

“Joey hashed password”

IHash的GetHashResult方法,傳入”1234”,回傳“Joey

hashed password”

結果

True

IAccountDao回傳與IHash結果相同

115

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

IAccountDao的GetPassword方法,傳入”joey”,回傳

“Joey hashed password”

IHash的GetHashResult方法,傳入”abc”,回傳“abc

hashed result”

結果

False

IAccountDao回傳與IHash結果不同

116

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

Demo – MyAuthentication BDD

Page 118: 如何在實務上使用TDD來開發 twmvc#12
Page 119: 如何在實務上使用TDD來開發 twmvc#12

實作 IAccountDao

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

MyAccountDao with hard-code

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

實作 IHash

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

MyHash with hard-code

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

Container.RegisterType

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

Demo – MyAccountDao & MyHash

Page 125: 如何在實務上使用TDD來開發 twmvc#12
Page 126: 如何在實務上使用TDD來開發 twmvc#12
Page 127: 如何在實務上使用TDD來開發 twmvc#12
Page 128: 如何在實務上使用TDD來開發 twmvc#12

需求

雛形

SeleniumTest

ControllerTest

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

IAuthentication

DI with MyAuthentication

ControllerTest

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

IAccountDaoIHash

DI with MyAuthentication

MyAuthenticationTesting

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

MyAccountDao

MyAuthenticationTesting

MyHash

Page 132: 如何在實務上使用TDD來開發 twmvc#12
Page 133: 如何在實務上使用TDD來開發 twmvc#12
Page 134: 如何在實務上使用TDD來開發 twmvc#12
Page 135: 如何在實務上使用TDD來開發 twmvc#12
Page 136: 如何在實務上使用TDD來開發 twmvc#12

你也可以!

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

Q & A

Thanks for your listening

137

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

謝謝各位

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

h t t p : / / m v c . t w