TDD day
在上一篇筆記,您了解了測試驅動的開發可以歸結為一個簡單的過程,稱為TDD Cycle。它有四個步驟,通常被“color coded”,如下所示:
我們稱它為“Red-Green-Refactor Cycle”
圖片來源
不斷的循環。
延續上一個邏輯。當帳號正確時,輸入匡下方的題型字串應該要隱藏。
當然我們要 conform TDD Cycle,我們繼續吧~
func testLoginPageViewController_usernameValidUILabel_isHidden(){
//given
//when
//then
}
在什麼特定條件下
func testLoginPageViewController_usernameValidUILabel_isHidden(){
//given
let state:LoginState = .userNameCorrect
//when
//then
}
誰在這個條件下
func testLoginPageViewController_usernameValidUILabel_isHidden(){
//given
let state:LoginState = .userNameCorrect
//when
sut.loginState = state
//then
}
預期要發生的結果
func testLoginPageViewController_usernameValidUILabel_isHidden(){
//given
let state:LoginState = .userNameCorrect
//when
sut.loginState = state
//then
let isHidden = sut.loginPageView.usernameValidUILabel.isHidden
XCTAssertEqual(isHidden, true)
}
這是我寫的第三個 TDD Cycle,建構這個 Cycle所花的時間不到三分鐘,可以說明當習慣了製作Test,製作Test並不會花費太多的時間。
Command + U 測試看看吧
很好,已經順利地做出一個 failing test。
我在 LoginViewController 代理了 LoginView,並在狀態改變時更改LoginView的配置。
Command + U 測試看看吧
順利地 pass 這個 test。
已經可以開始 Refactor。
這兩段程式碼有很明顯的耦合,嘗試把它拆開。
func changepasswordValidUILabelIsHidden(loginState:LoginState) {
if loginState == .bothCorrect || loginState == .userNameCorrect {
loginPageView.usernameValidUILabel.isHidden = true
}else{
loginPageView.usernameValidUILabel.isHidden = false
}
}
func changeUsernameValidUILabelIsHidden(loginState:LoginState) {
if loginState == .bothCorrect || loginState == .passwordCorrect {
loginPageView.passwordValidUILabel.isHidden = true
}else{
loginPageView.passwordValidUILabel.isHidden = false
}
}
Command + u
仍然pass 代表這次的 Refactor沒有問題。
這次完成 Cycle的速度快很多,只要熟練,TDD Cycle 不會造成太大的時間負擔。
下一篇還會繼續分享,下一個 TDD Cycle