背景:
單元測試為了保證代碼質(zhì)量、快速迭代的需求。在重構(gòu)期間,可以盡可能的測試各種邊界case。在開發(fā)階段就可以盡快的發(fā)現(xiàn)問題,解決問題并驗證解決方案的正確性。提高開發(fā)效率,在項目迭代的時候,隨著功能的增加,代碼量的遞增,Android app的編譯、運行時間也會變長,因此必要的單元測試是必須的。
更多單元測試的概述:關于單元測試的概述
調(diào)研分析:
常見的測試工具:
1、JUnit:Junit4是Java標準測試庫。
2、Mockito、PowerMock、Mockk: 這些是Java 單元測試 Mock 框架,可以mock出假的對象替換真實對象的邏輯實現(xiàn)。(Mockk是針對kotlin的)(PowerMock可以mock private、static、final方法)
3、Robolectric:Robolectric可以提供一套虛假的android運行環(huán)境,解決了在Java單元測試中無法使用android環(huán)境的問題。
4、Expresso:Espresso 是Android UI 測試框架,適用于單應用的功能頁面測試。
5、UI Automator:UI Automator 是一個界面測試框架,適用于整個系統(tǒng)上以及多個已安裝應用間的跨應用功能界面測試。
在這里插入圖片描述
總結(jié):
- Instrumentation test已經(jīng)過時,谷歌推出了Android JUnit Test Runner作為替換。
- junit4適用與在jvm運行環(huán)境下進行單元測試,不需要依賴于android運行環(huán)境,優(yōu)點是:運行速度快。缺點是無法進行UI測試。
- Expresso 和 UI Automator,優(yōu)點是可以進行UI測試,但是需要Android運行環(huán)境(真機或者模擬的Android環(huán)境(Robolectric))。由于需要編譯,運行,因此耗時較長。
- Robolectric能夠模擬Android運行環(huán)境(比如序列化、提供上下文等)。
- Mock工具可以模擬測試類所依賴的外部對象,模擬出外部對象的行為。kotlin建議適用mockk庫。
測試覆蓋率
參考jacooc的文章: