Android Studio 單元測試入門
通常在開發Android app的時候經常會寫一些小函式並驗證它是否執行正確,通常做法我們是把這個函式放到某個介面(Activity上)執行一下,執行整個工程跑一下app,通過打log的方式來驗證。然後現在我們活用Android Studio自帶的單元測試功能即可免除這種麻煩
內容提要
- 配置
- 編寫Java測試用例
- 編寫Android測試用例
- 其他測試基類
配置
在Android Studio中進行單元測試並不需要什麼外掛或者過多的配置,Android Studio本身就整合了測試環境,無論是單純的java程式碼單元測試還是依賴Android SDK的Android程式碼單元測試,都能得心應手。
首先在你的gradle中加入Junit的依賴,注意這裡的依賴方式是測試期間的依賴(testCompile):
dependencies { testCompile 'junit:junit:4.12' }
再在專案的app/src下面和main資料夾同級的建立androidTest和test目錄,並且分別在各自目錄下建議java/com/xxx/xxx類似的和主工程一致的包名目錄,建立好後,你的專案在Android Studio的Project中應該是這樣的:
編寫Java測試用例
如果所寫的測試程式碼沒有使用android sdk(android.***下的程式碼),那麼可以在test目錄下新建,本例中即為ExampleUnitTest,例子中測試了一個RxJava的Observable的發射後被消費的結果。
注意測試用例即一個public void的方法,並且加上@Test註解,這是Junit的標準用法
package com.jason.rxjavademo; import org.junit.Test; import rx.Observer; import rx.subjects.PublishSubject; public class ExampleUnitTest { @Test public void testPublishSubject() { PublishSubject<String> stringPublishSubject = PublishSubject.create(); stringPublishSubject.subscribe(new Observer<String>() { @Override public void onCompleted() { System.out.println("Observable completed"); } @Override public void onError(Throwable e) { } @Override public void onNext(String s) { System.out.println("Observer consumed " + s); } }); stringPublishSubject.onNext("hello world"); stringPublishSubject.onCompleted(); } }
這時候開啟Android Studio左邊的Structure的皮膚,可以看到測試用例方法testPublishSubject
右擊並執行它,測試通過,返回了正確的值
注意本測試用例試用了System.out.println所以測試結果直接列印在了控制檯上,如果把列印的地方換成Log.d()呢,你會發現報錯:
這個實際是因為你在java的Unit test中引用了Android的程式碼,即android.util.log.Log。所以對於測試Android程式碼,需要在androidTest中
編寫Android測試用例
Android測試用例我們可以
- 在androidTest下新建一個java類,並且繼承自InstrumentationTestCase
- 編寫一個public void的方法,但是必須要是方法名以test打頭,比如testPublishSubject,並不需要@Test註解
public class TestSubject extends InstrumentationTestCase { private static final String LOG_TAG = "test"; public void testPublishSubject() { PublishSubject<String> stringPublishSubject = PublishSubject.create(); stringPublishSubject.subscribe(new Observer<String>() { @Override public void onCompleted() { Log.d(LOG_TAG, "Observable completed"); } @Override public void onError(Throwable e) { } @Override public void onNext(String s) { Log.d(LOG_TAG, "Observer consumed " + s); } }); stringPublishSubject.onNext("hello world"); stringPublishSubject.onCompleted(); } }
本例執行後,會在Android Monitor中以test這個LOGTAG打出和上一節一樣的Log
Android Studio也提供了測試單個Activity或者多個Activities的測試用例方法基類,比如ActivityInstrumentationTestCase2,步驟為
- 在androidTest下新建一個java類,並且繼承自ActivityInstrumentationTestCase2,傳入需要測試的Activity的類到泛型
- 複寫setUp方法,獲得Context
- 編寫一個public void的方法,但是必須要是方法名以test打頭,比如testStart,並不需要@Test註解
public class TestActivity extends ActivityInstrumentationTestCase2<MainActivity> { private Context ctx; public TestActivity() { super(MainActivity.class); } @Override protected void setUp() throws Exception { super.setUp(); ctx = getActivity().getApplicationContext(); } public void testStart() { Intent intent = new Intent(ctx, MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); ctx.startActivity(intent); } }
執行這個測試用例,你會發現模擬器上單獨啟動了這個Activity
其他測試基類
除了InstrumentationTestCase和ActivityInstrumentationTestCase2外,android.test還提供了很多別的測試基類,比如
- ActivityUnitTestCase
- MockApplication
- ServiceTestCase
相關文章
- Android自動化測試入門(四)單元測試Android
- 前端單元測試入門前端
- 測試 之Java單元測試、Android單元測試JavaAndroid
- iOS 單元測試和 UI 測試快速入門iOSUI
- SpringBoot 單元測試入門實踐Spring Boot
- Java Junit單元測試(入門必看篇)Java
- Jest 單元測試疑難點入門
- Android 單元測試實踐Android
- 關於 Android 單元測試Android
- 單元測試的入門實踐與應用
- Android Studio jni - 入門篇Android
- Android Studio上Kotlin的入門AndroidKotlin
- 單元測試:單元測試中的mockMock
- android單元測試遇到問題總結Android
- 翻譯:iOS Swift單元測試 從入門到精通 Unit Test和UI測試 UITestiOSSwiftUI
- 一文全面瞭解Android單元測試Android
- 解讀Android官方MVP專案單元測試AndroidMVP
- Android測試工具 UIAutomator入門與介紹AndroidUI
- .net持續整合單元測試篇之單元測試簡介以及在visual studio中配置Nunit使用環境
- Spring入門學習手冊 4:Spring單元測試怎麼搞?Spring
- Mac之Android Studio開發NDK入門MacAndroid
- 單元測試,只是測試嗎?
- 單元測試-【轉】論單元測試的重要性
- 編寫你的第一個 Android 單元測試Android
- android-MVP架構中Presenter的單元測試AndroidMVP架構
- golang單元測試Golang
- 單元測試真
- iOS 單元測試iOS
- python 單元測試Python
- 前端單元測試前端
- Flutter 單元測試Flutter
- 單元測試 Convey
- 單元測試工具
- 聊聊單元測試
- 十五、單元測試
- Go單元測試Go
- SpringBoot單元測試Spring Boot
- 【Android Studio】入門系列 3.建或匯入APPAndroidAPP
- Flutter入門-環境部署-windows+android studioFlutterWindowsAndroid