Android中的互動測試(Interaction Testing in Android):首部曲

Carter Chen
5 min readSep 16, 2019

--

Photo by Jonas Vincent on Unsplash

前言

自從Android Architecture Component(a.k.a. “AAC”) 在2017年的第一次登場、2018年的Google I/O官方App帶入了眾多範例全力support之下,其中自帶的Lifecycle、ViewModel元件已經帶領我們認識在Android App架構設計上的全新可能:MVVM(Model-View-ViewModel)模式,擺脫了一直以來總是由MVP(Model-View-Presenter)模式獨領風騷的狀況。

那要說老前輩MVP不好嗎?不然為什麼要推MVVM呢?我覺得那也未必。MVP與MVVM是從不同角度去解決問題,在各種情境下的表現優缺各異,那既然不能同一個基準點上進行比較,去區分孰優孰劣就是一件沒有意義的事情了。

其實雙方最強調的部分應該是在如何達到separation of concerns、如何最大限度去進行decoupling,以及如何設計到最接近符合SOLID原則,2018年的Google I/O官方App甚至就以Clean Architecture為目標進行設計

然後話說著說著就也離題了😂😂😂,其實如果架構設計得夠好,每個模組元件所負責的職責與功能夠清楚簡單,那將大大的方便進行測試。為什麼要寫測試?測試有什麼好處呢?這部分可能會另外寫一篇單元測試(Unit Testing)的文章進行探討,而今天的這個系列,會將重點放在分享在MVP與MVVM模式下寫互動測試(Interaction Testing)的經驗。

Define Interaction Testing

單元測試的藝術(The art of unit testing)作者Osherove(2014)指出:

Interaction testing is testing how an object sends messages (calls methods) to other objects. You use interaction testing when calling another object is the end result of a specific unit of work.

You can also think of interaction testing as being action-driven testing. Action-driven testing means that you test a particular action an object takes (such as sending a message to another object).

我把這段話解讀成:

所謂的互動測試是用來測試一個物件是如何去對其他的物件發送指令(或呼叫物件的方法)。如果你想要在你程式碼的某段執行區塊驗收最後是不是有物件被呼叫了,就使用互動測試吧。

你可以將互動測試當成是「基於動作」的測試,互動測試可以用來測試某些特定的動作是不是有發生。

有沒有飯粒🍚?

為了讓大家可以更加了解什麼是互動測試,接下來我們將各使用MVP與MVVM模式來開發一個簡易的App。這個App的需求是這樣子的:每次使用者打開APP時,都可以在螢幕上看見當前的氣溫,就像這樣:

請注意接下來探討的部分以及範例程式碼,會假設讀者已經認識或熟悉以下概念:(不過不知道也沒關係啦,哈哈😝)

  • Knowledge about Android Architecture(e.g. MVP, MVVM). See Android Architecture official Github repository for more details.
  • RxJava
  • Retrofit
  • Mock Framework(e.g. Mockito, Mockk)
  • Kotlin(Optional)

讓我們繼續看下去~

參考資料

  • Osherove, R. (2014). The art of unit testing: with examples in C. Manning Publ.

--

--