一般在開發Android app的時候常常會寫一些小函數並驗證它是否運行正確,一般作法咱們是把這個函數放到某個界面(Activity上)執行一下,運行整個工程跑一下app,經過打log的方式來驗證。不過,如今咱們活用Android Studio自帶的單元測試功能便可免除這種麻煩,直接寫測試用例像Junit那樣來驗證你的小函數html
在Android Studio中進行單元測試並不須要什麼插件或者過多的配置,Android Studio自己就集成了測試環境,不管是單純的java代碼單元測試仍是依賴Android SDK的Android代碼單元測試,都能駕輕就熟。
首先在你的gradle中加入Junit的依賴,注意這裏的依賴方式是測試期間的依賴(testCompile):java
dependencies { testCompile 'junit:junit:4.12' }
再在項目的app/src下面和main文件夾同級的創建androidTest和test目錄,而且分別在各自目錄下建議java/com/xxx/xxx相似的和主工程一致的包名目錄,創建好後,你的項目在Android Studio的Project中應該是這樣的:
android
若是所寫的測試代碼沒有使用android sdk(android.***下的代碼),那麼能夠在test目錄下新建,本例中即爲ExampleUnitTest,例子中測試了一個RxJava的Observable的發射後被消費的結果。
注意測試用例即一個public void的方法,而且加上@Test註解,這是Junit的標準用法git
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
github
右擊並運行它,測試經過,返回了正確的值
android-studio
注意本測試用例試用了System.out.println因此測試結果直接打印在了控制檯上,若是把打印的地方換成Log.d()呢,你會發現報錯:
app
這個實際是由於你在java的Unit test中引用了Android的代碼,即android.util.log.Log。因此對於測試Android代碼,須要在androidTest中ide
Android測試用例咱們能夠函數
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,步驟爲
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還提供了不少別的測試基類,好比
github site for this blog
https://github.com/soaringEveryday/BlogRoad/blob/master/Android%20Studio%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95%E5%85%A5%E9%97%A8.md
轉載請註明 http://www.cnblogs.com/soaringEveryday/p/5461970.html