component unit test

46
William Wang Sr. Engineer Component Unit Test - How we start in mobile app ?

Upload: william-wang

Post on 16-Jan-2017

1.385 views

Category:

Software


2 download

TRANSCRIPT

Page 1: Component Unit Test

William WangSr. Engineer

Component Unit Test - How we start in mobile app ?

Page 2: Component Unit Test

Who am i ?

• 靠寫程式混口飯吃的哲學家

Java, Android Developer

Agile Believer

Clean Code Believer

Performance Matter王宣皓

William Wang

Page 3: Component Unit Test

We all know that Test is important ...

Page 4: Component Unit Test

Problems1. 自動化測試很重要,但不知怎麼開始

2. 寫了UI自動化測試腳本,浪費好多撰寫成本

3. UI自動化腳本走不完所有路徑

4. UI自動化測試總是跑很慢

5. RD:Unit Test綠燈了!

QA:所以呢?可以吃嗎?

Page 5: Component Unit Test
Page 6: Component Unit Test

My favorite talk

Page 7: Component Unit Test
Page 8: Component Unit Test
Page 9: Component Unit Test
Page 10: Component Unit Test
Page 11: Component Unit Test

How aboutfollow suit in the app?

Page 12: Component Unit Test

Tips 1

MVP Pattern

Page 13: Component Unit Test

Tips 2

API Abstraction

Transforn

Page 14: Component Unit Test

V

I

E

W

PR

ES

EN

TER

M O

D E

L

A

P

I

Mobile App Workflow

分析、委任事件及資料

業務邏輯

解析結果顯示邏輯更新畫面 業務邏輯

解析View事件

Page 15: Component Unit Test

V

I

E

W

PR

ES

EN

TER

M O

D E

L

A

P

I

Mobile App Workflow

分析、委任事件及資料

業務邏輯

解析結果顯示邏輯更新畫面 業務邏輯

解析View事件

Page 16: Component Unit Test

API Test in clientE2E Validation• 確保輸入符合Server要求、回傳「格式」符合期望

How to validate• 輸入資料打API成功(不管回傳值正不正確)

• 解析Server回傳資料「格式」正確

■ Json參數、格式無誤

■ 轉換成Model Class無誤

Page 17: Component Unit Test

V

I

E

W

PR

ES

EN

TER

M O

D E

L

A

P

I

Mobile App Workflow

分析、委任事件及資料

業務邏輯

解析結果顯示邏輯更新畫面 業務邏輯

解析View事件

Page 18: Component Unit Test

Model Unit Test

E2E Validation• 業務邏輯、狀態測試

How to validate• 輸入各種Input以並驗證期望的Output

■ 模擬Presenter呼叫的狀況

■ 不呼叫API,模擬API回傳的結果

Page 19: Component Unit Test

V

I

E

W

PR

ES

EN

TER

M O

D E

L

A

P

I

Mobile App Workflow

分析、委任事件及資料

業務邏輯

解析結果顯示邏輯更新畫面 業務邏輯

解析View事件

Page 20: Component Unit Test

Presenter TestE2E Validation• Presenter:Feature的高階抽象,驗證以下行為:

■ 接收View功能性事件

■ 將功能委派給一個或多個Model■ 通知View更新畫面

How to validate• 驗證當事件進來時有沒有呼叫正確的Model• 驗證Model Callback時有沒有呼叫正確的View

Page 21: Component Unit Test

V

I

E

W

PR

ES

EN

TER

M O

D E

L

A

P

I

Mobile App Workflow

分析、委任事件及資料

業務邏輯

解析結果顯示邏輯更新畫面 業務邏輯

解析View事件

Page 22: Component Unit Test

View UI Test

E2E Validation• 操作UI、並驗證回饋正確

How to validate• 驗證UI事件進來時呼叫到對的Presenter方法

• 模擬Callback驗證更新View是否正確

Page 23: Component Unit Test

Example

Page 24: Component Unit Test

認識興趣相同的人 一起做有趣的事

我們在找同伴一起去玩,你來嗎?!

Citymate 同伴

Page 25: Component Unit Test
Page 26: Component Unit Test

史詩級登入流程...

Success

Page 27: Component Unit Test

DEMO

Page 28: Component Unit Test

Espresso 2.0

Page 29: Component Unit Test
Page 30: Component Unit Test

How to Design ?

Page 31: Component Unit Test

Sample Class Diagram

Page 32: Component Unit Test

Test UI

MockEspresso

Page 33: Component Unit Test

Test Presenter

MockMock

MockJunit

Runner

Page 34: Component Unit Test

Test ModelJunit

Runner

Page 35: Component Unit Test

Test ModelJunit

Runner

Mock Mock

Page 36: Component Unit Test

Put logic into model

Page 37: Component Unit Test

Account Manager

CheckCheck

Check Check

Check

No Phone First FB login No Intresting First Register

Page 38: Component Unit Test

Isolate platform, library

Page 39: Component Unit Test
Page 40: Component Unit Test

Dependency Injection

Page 41: Component Unit Test

public AccountManager(CitytalkPreference preference, ApiFacade apiFacade) { this.preference = preference; this.apiFacade = apiFacade;

……

}

Page 42: Component Unit Test

public LoginPresenter(AccountManager accountManager, FacebookUtils facebookUtil, TourLoginView tourLoginView) { mAccountManager = accountManager; mTourLoginView = tourLoginView; mFacebookUtil = facebookUtil; mFbLoginCallback = new FacebookLoginCallBack();}

Page 43: Component Unit Test

Class Lifecycle

Page 44: Component Unit Test

Application

Activity

Fragment

Get Static Models

Get Local Models

Get Presenter

Page 45: Component Unit Test

Let's Discussion

&Q A