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"这个包名,用顶级包名,这样能测试所有包的内容。

  • 创建一个继承于InstrumentationTestCaseAndroidTestCase也行,不过它没有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了。

 

posted @ 2013-11-27 17:29  天下.无贼  阅读(1621)  评论(0)    收藏  举报