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
- 897