qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          Android JUnit test 進行自動化測試

            一. 被test的工程:
            新建一個android工程:D_session;它有一個activity:D_sessionActivity;package名:com.mysession
            二.測試工程:
            新建一個測試工程:D_sessionTest, 類型是android test project;
            1. menifest文件:
          <?xml version="1.0" encoding="utf-8"?>
          <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.mysession.test"
          android:versionCode="1"
          android:versionName="1.0" >
          <uses-sdk android:minSdkVersion="8" />
          <instrumentation
          android:name="android.test.InstrumentationTestRunner"
          android:targetPackage="com.mysession" />
          <application
          android:icon="@drawable/ic_launcher"
          android:label="@string/app_name" >
          <uses-library android:name="android.test.runner" />
          </application>
          </manifest>
            2. 一個base activity 來定義各種模擬測試者的動作和判斷測試結果,各個測試類都繼承該類:
          package com.mysession.test;
          import android.app.Activity;
          import android.app.Instrumentation;
          import android.app.Instrumentation.ActivityMonitor;
          import android.content.Intent;
          import android.test.InstrumentationTestCase;
          import android.test.TouchUtils;
          import android.widget.Button;
          import android.widget.TextView;
          import com.mysession.D_sessionActivity;
          public class SessionActivityTest extends InstrumentationTestCase {
          private Instrumentation mInstrumentation;
          private ActivityMonitor mSessionMonitor;
          private Activity mCurrentActivity, mSessionActivity;
          private String TextNotEqual = "text not equal.";
          private static final String PackageName = "com.mysession";
          @Override
          protected void setUp() throws Exception {
          // 初始化
          super.setUp();
          if (mInstrumentation == null) {
          mInstrumentation = getInstrumentation();
          }
          mSessionActivity = null;
          }
          @Override
          protected void tearDown() throws Exception {
          super.tearDown();
          //釋放資源
          closeActivity(mSessionActivity);
          mCurrentActivity = null;
          }
          private void closeActivity(Activity activity) {
          if(activity != null){
          activity.finish();
          activity = null;
          }
          }
          public void openSessionActivity() {
          // 打開session activity
          try {
          setUp();
          } catch (Exception e) {
          e.printStackTrace();
          }
          mSessionMonitor = mInstrumentation.addMonitor(
          D_sessionActivity.class.getName(), null, false);
          Intent intent = new Intent(Intent.ACTION_MAIN);
          intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
          intent.setClassName(PackageName, D_sessionActivity.class.getName());
          mInstrumentation.startActivitySync(intent);
          mSessionActivity = getInstrumentation().waitForMonitor(mSessionMonitor);
          assertNotNull(mSessionActivity);
          mCurrentActivity = mSessionActivity;
          }
          //判斷text是否正確
          public void assertTextEqual(int resId, String strText) {
          TextView textView = (TextView) mCurrentActivity.findViewById(resId);
          assertNotNull(textView);
          assertEquals(TextNotEqual,
          strText,
          textView.getText().toString());
          };
          // 模擬按鈕點擊事件
          public void clickButton(int resId){
          Button button = (Button) mCurrentActivity.findViewById(resId);
          assertNotNull(button);
          TouchUtils.clickView(this, button);
          }
          }
           3. 各個測試類:
            測試類一:
          package com.mysession.test.cases;
          import com.mysession.R;
          import com.mysession.test.SessionActivityTest;
          public class MyCase1 extends SessionActivityTest {
          public void testCase1() {
          openSessionActivity();
          assertTextEqual(R.id.etUrl,
          "http://172.20.230.5/iportal/samples/jsapi/mobile.html");
          }
          public void testCase3() {
          openSessionActivity();
          clickButton(R.id.btnLoad);
          clickButton(R.id.btnHistory);
          }
          }
            測試類二:
          package com.mysession.test.cases;
          import com.mysession.R;
          import com.mysession.test.SessionActivityTest;
          public class MyCase2 extends SessionActivityTest{
          public void testCase2() {
          openSessionActivity();
          clickButton(R.id.btnLoad);
          }
          }
            三. 有些動作(如點擊menu)需要通過包robotium-solo-1.8.0.jar來完成。
            所以要在Build Path->Configure Build Path…中導入:robotium-solo-1.8.0.jar
            程序中:
            private Solo solo;
            solo = new Solo(getInstrumentation(),getActivity);
            就可以使用solo了, 如:
            solo.clickOnMenuItem(text);
            solo.goBack();

          posted on 2014-08-13 09:52 順其自然EVO 閱讀(316) 評論(0)  編輯  收藏 所屬分類: android

          <2014年8月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 赞皇县| 信宜市| 呼玛县| 青龙| 双柏县| 理塘县| 财经| 安化县| 东乡族自治县| 昔阳县| 明水县| 莱州市| 玛纳斯县| 鄂伦春自治旗| 南充市| 邵东县| 甘洛县| 高要市| 仙桃市| 石城县| 凌源市| 班戈县| 平阴县| 海城市| 武山县| 金堂县| 太和县| 黔东| 嘉鱼县| 仙游县| 年辖:市辖区| 西昌市| 阳城县| 阳春市| 孝义市| 泗水县| 巴青县| 绥阳县| 陕西省| 靖远县| 丰台区|