android - 单元测试小结(包括异步)
- 配置AndroidManifest:
<!-- 测试相关 --> <uses-permission android:name="android.permission.RUN_INSTRUMENTATION" /> <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.platomix.helloworld" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" >
<!-- 测试相关 --> <uses-library android:name="android.test.runner" /> <activity android:name="com.platomix.helloworld.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>
这里要注意一点,android:targetPackage="com.platomix.helloworld"这个包名,用顶级包名,这样能测试所有包的内容。
- 创建一个继承于InstrumentationTestCase(AndroidTestCase也行,不过它没有runTestOnUiThread()这个用天异步的方法)的类。
package com.platomix.test; import java.util.concurrent.CountDownLatch; import android.os.AsyncTask; import android.test.InstrumentationTestCase; public class SecordTest extends InstrumentationTestCase { private static final String TAG = "SecordTest.java"; protected void setUp() throws Exception { super.setUp(); } protected void tearDown() throws Exception { super.tearDown(); } public void testFun() throws Exception { assertEquals(2, 2); } // 普通test public void testOfun() throws Exception { assertEquals(0, 10); } // 异步test public void testMyAsyncTask() throws Throwable{ // create a signal to let us know when our task is done. final CountDownLatch signal = new CountDownLatch(1); // Execute the async task on the UI thread! THIS IS KEY! runTestOnUiThread(new Runnable() { @Override public void run() { final AsyncTask<String, Void, String> myTask = new AsyncTask<String, Void, String>() { @Override protected String doInBackground(String... arg0) { //Do something meaningful. try { Thread.sleep(2000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } return "something happened!"; } @Override protected void onPostExecute(String result) { super.onPostExecute(result); signal.countDown(); } }; myTask.execute("Do something"); } }); try { signal.await(); } catch (InterruptedException e) { // TODO Auto-generated catch block fail(); e.printStackTrace(); } } }
- 到此就OK了。

浙公网安备 33010602011771号