Kotlin TDD

以 Android 開發為例

關於我

https://medium.com/@evanchen76

Evan  陳瑞忠

TDD

  • Kotlin TDD:Bowling Game Kata
     
  • Android TDD:踩地雷
     
  • Android TDD:登入畫面

單元測試 Unit Test

@Test
fun addTest() {
    val actual = math.add(1, 2)
    val expected = 3
    Assert.assertEquals(expected, actual)
}
class Math {
    fun add(number1: Int, number2: Int): Int {
        return number1 + number2
    }
}

什麼是TDD

Kotlin TDD

Bowling Game TDD

測試案例

TDD的好處

  • 先想清楚需求是什麼
     
  • 思緒跟著需求。用工具產生程式碼,不需要在不同的檔案中跳來跳去。
     
  • 避免Over Design
     
  • 小步快走,有錯可以馬上退回來。
     
  • 速度快

Android TDD

Android TDD 遇到的問題

  • 有UI
     
  • 遇到不知道怎麼測試
     
  • 遇到不需要測試的

踩地雷

踩地雷

先寫哪個測試

先寫有沒有踩到地雷的判斷?

先寫UI?

先寫輸贏的判斷?

先寫附近地雷數的數字?

我以前都這樣做

先找最需要測試的

先找最複雜的邏輯

 其實

先寫測試 != 先找可以測試的來寫

先寫測試 != 先找最需要測試的來寫

 先看需求

先不管有哪些測試

先把需求拆成一步一步來看

從UI看需求

有81個格子

每一個都是蓋起來的

15%的格子有地雷

class CellCreator(){
  fun create(): List<Cell>{
    //產生81個Cell
  }
}

Android TDD

圖片參考:Google I/O 2017

Android TDD

完成UI測試

不只是通過UI測試

完成UI的所有細節

點擊方格

單元測試:

  • 點擊方格,方格的狀態會變成打開。
  • 點擊方格,如果旁邊都沒有地雷,顯示旁邊的地雷數
  • 點擊方格,旁邊如果數字是 0,就自動點擊打開

UI測試:

  • (x)點擊方格,方格的狀態會變成打開。
  • 點擊方格,如果旁邊都沒有地雷,顯示旁邊的地雷數
  • (x)點擊方格,旁邊如果數字是 0,就自動點擊打開

標註地雷

單元測試:

  • 你可以在方格裡插上旗子提醒該格為地雷

UI測試:

  • 驗證該 Cell 長按後有出現旗子。 

判定遊戲結果

單元測試:

  • 除了有地雷的方格,其餘都被打開,則為贏得遊戲。
  • 點擊到有地雷的方格,即為輸了遊戲。

UI 測試:

  • 贏遊戲時,畫面應出現你贏了的文字。
  • 輸遊戲時,畫面應出現你輸了的文字。

Android TDD

Android TDD

Login Sample

開啟頁面

登入成功/失敗->Snackbar

登入檢查

需求

1. 開啟畫面

2. 點擊登入

開啟App

開啟App後應看到:

帳號輸入欄位

密碼輸入欄位

登入按鈕

點擊登入

點擊登入,

如未輸入帳號密碼應提示

登入呼叫Repository並顯示載入中

如登入成功,應跳出Snackbar

如登入失敗,應跳出Snackbar

未輸入帳號密碼

紅燈

綠燈

登入成功

登入成功

Login

完成Repository

完成Activity,通過UI測試

總結

  • 不是先挑需要測試的來寫
     
  • 不是先挑最複雜的來寫
     
  • 從需求去看

Android TDD

可不可以先把單元測試都寫完

再通過UI測試?

Android TDD

使用者體驗

透明度

Android TDD

民宿列表

收藏

排序

篩選

Android TDD

沒有講的

  • Android Unit test
  • Android UI Test
  • Dependency Injection
  • Mock、Stub
  • Architecture

推薦課程

  • 91 Joey【演化式設計:測試驅動開發與持續重構】
     
  • 91 Joey【極速開發+】

https://medium.com/@evanchen76

End

Kotlin TDD

By evanchen76

Kotlin TDD

  • 176
Loading comments...

More from evanchen76