William WangSr. Engineer
Component Unit Test - How we start in mobile app ?
Who am i ?
• 靠寫程式混口飯吃的哲學家
Java, Android Developer
Agile Believer
Clean Code Believer
Performance Matter王宣皓
William Wang
We all know that Test is important ...
Problems1. 自動化測試很重要,但不知怎麼開始
2. 寫了UI自動化測試腳本,浪費好多撰寫成本
3. UI自動化腳本走不完所有路徑
4. UI自動化測試總是跑很慢
5. RD:Unit Test綠燈了!
QA:所以呢?可以吃嗎?
My favorite talk
How aboutfollow suit in the app?
Tips 1
MVP Pattern
Tips 2
API Abstraction
Transforn
V
I
E
W
PR
ES
EN
TER
M O
D E
L
A
P
I
Mobile App Workflow
分析、委任事件及資料
業務邏輯
解析結果顯示邏輯更新畫面 業務邏輯
解析View事件
V
I
E
W
PR
ES
EN
TER
M O
D E
L
A
P
I
Mobile App Workflow
分析、委任事件及資料
業務邏輯
解析結果顯示邏輯更新畫面 業務邏輯
解析View事件
API Test in clientE2E Validation• 確保輸入符合Server要求、回傳「格式」符合期望
How to validate• 輸入資料打API成功(不管回傳值正不正確)
• 解析Server回傳資料「格式」正確
■ Json參數、格式無誤
■ 轉換成Model Class無誤
V
I
E
W
PR
ES
EN
TER
M O
D E
L
A
P
I
Mobile App Workflow
分析、委任事件及資料
業務邏輯
解析結果顯示邏輯更新畫面 業務邏輯
解析View事件
Model Unit Test
E2E Validation• 業務邏輯、狀態測試
How to validate• 輸入各種Input以並驗證期望的Output
■ 模擬Presenter呼叫的狀況
■ 不呼叫API,模擬API回傳的結果
V
I
E
W
PR
ES
EN
TER
M O
D E
L
A
P
I
Mobile App Workflow
分析、委任事件及資料
業務邏輯
解析結果顯示邏輯更新畫面 業務邏輯
解析View事件
Presenter TestE2E Validation• Presenter:Feature的高階抽象,驗證以下行為:
■ 接收View功能性事件
■ 將功能委派給一個或多個Model■ 通知View更新畫面
How to validate• 驗證當事件進來時有沒有呼叫正確的Model• 驗證Model Callback時有沒有呼叫正確的View
V
I
E
W
PR
ES
EN
TER
M O
D E
L
A
P
I
Mobile App Workflow
分析、委任事件及資料
業務邏輯
解析結果顯示邏輯更新畫面 業務邏輯
解析View事件
View UI Test
E2E Validation• 操作UI、並驗證回饋正確
How to validate• 驗證UI事件進來時呼叫到對的Presenter方法
• 模擬Callback驗證更新View是否正確
Example
認識興趣相同的人 一起做有趣的事
我們在找同伴一起去玩,你來嗎?!
Citymate 同伴
史詩級登入流程...
Success
DEMO
Espresso 2.0
How to Design ?
Sample Class Diagram
Test UI
MockEspresso
Test Presenter
MockMock
MockJunit
Runner
Test ModelJunit
Runner
Test ModelJunit
Runner
Mock Mock
Put logic into model
Account Manager
CheckCheck
Check Check
Check
No Phone First FB login No Intresting First Register
Isolate platform, library
Dependency Injection
public AccountManager(CitytalkPreference preference, ApiFacade apiFacade) { this.preference = preference; this.apiFacade = apiFacade;
……
}
public LoginPresenter(AccountManager accountManager, FacebookUtils facebookUtil, TourLoginView tourLoginView) { mAccountManager = accountManager; mTourLoginView = tourLoginView; mFacebookUtil = facebookUtil; mFbLoginCallback = new FacebookLoginCallBack();}
Class Lifecycle
Application
Activity
Fragment
Get Static Models
Get Local Models
Get Presenter
Let's Discussion
&Q A
Reference
https://developers.google.com/google-test-automation-conference/2015/presentations - GTAC 2015: Presentations Slides
Top Related