iT邦幫忙

0

iOS APP iOS Test-Driven Development by Tutorials free section 學習筆記-the TDD Cycle 3

iOS APP iOS Test-Driven Development by Tutorials free section 學習筆記-the TDD Cycle 3

tags: TDD day

TDD Cycle

上一篇筆記,您了解了測試驅動的開發可以歸結為一個簡單的過程,稱為TDD Cycle。它有四個步驟,通常被“color coded”,如下所示:
我們稱它為“Red-Green-Refactor Cycle”

圖片來源

  • 失敗時,以 Red為顏色標記
  • 通過時,以 green 為顏色標記
  • 通過後進入 Refactor階段

不斷的循環。

Get start

延續上一個邏輯。當帳號正確時,輸入匡下方的題型字串應該要隱藏。

當然我們要 conform TDD Cycle,我們繼續吧~

Red : Write a failing test

  1. 首先,先是照著test nomenclaturn。
  2. 接著寫下 given when then三個註解,幫助自己構思測試流程。
    func testLoginPageViewController_usernameValidUILabel_isHidden(){
        //given
        //when
        //then
    }
  1. 照著測試流程構思。

Given

在什麼特定條件下

    func testLoginPageViewController_usernameValidUILabel_isHidden(){
        //given
        let state:LoginState = .userNameCorrect
        //when
        //then
    }

When

誰在這個條件下

    func testLoginPageViewController_usernameValidUILabel_isHidden(){
        //given
        let state:LoginState = .userNameCorrect
        //when
        sut.loginState = state
        //then
    }

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。

Green : Make the test pass ˙

我在 LoginViewController 代理了 LoginView,並在狀態改變時更改LoginView的配置。

Command + U 測試看看吧

順利地 pass 這個 test。
已經可以開始 Refactor。

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沒有問題。

完成 TDD Cycle

這次完成 Cycle的速度快很多,只要熟練,TDD Cycle 不會造成太大的時間負擔。

下一篇還會繼續分享,下一個 TDD Cycle


尚未有邦友留言

立即登入留言