最簡單的三種不同創建方法

最簡單的三種不同創建方法:

先創建一個android工程(TestedProject),做爲被測工程。在這個工程裏,我做了三個activity,第一個activity裏只有一個按鈕,點擊跳轉,第二個activity裏有一個按鈕,一個editText,一個listView,一個Spinner,點擊按鈕實現跳轉。第三個activity只有一個TextView(包名爲根路徑.third)。

創建測試工程。右鍵點擊TestedProject,new --> other --> android test project,點next -->輸入工程名(本人用TestProject),next -->注意這個界面有個單選按鈕,記得選This Project,finish.

src 下有一個空包,右鍵,創建類(本人用Test),這個工程繼承ActivityInstrumentationTestCase2。

代碼如下:

public class Test extends ActivityInstrumentationTestCase2<MainActivity> {
 private Solo solo;
 private Solo2 solo2;

 public Test() {
  super(MainActivity.class);
 }

 @Override
 protected void setUp() throws Exception {
  // setUp() is run before a test case is started.
  // This is where the solo object is created.
//  solo = new Solo(getInstrumentation(), getActivity());
  solo2 = new Solo2(getInstrumentation(), getActivity());
 }

 @Override
 protected void tearDown() throws Exception {
  // tearDown() is run after a test case has finished.
  // finishOpenedActivities() will finish all the activities that have
  // been opened during the test execution.
  solo2.finishOpenedActivities();
 }

 /**
  * 測試點擊事件
  *
  * @throws InterruptedException
  */
 public void testClick() throws InterruptedException {
  solo.assertCurrentActivity("進入MainActivity", "MainActivity");
  Thread.sleep(1000);//這個必須有,不然會找不到組件的錯誤
  solo.clickOnButton(0);//這裏的“0”,是在界面上數的。當然,clickOnButton總共有三種方法,第二種是跟據button的text找,第三種是跟據 button在原工程中的id找。
  //根據id找的方法如下
  /**
   * Activity currentActivity = solo.getCurrentActivity();
   * int id = currentActivity.getResources().getIdentifier("btn", "id", currentActivity.getPackageName());"btn"是button的id,“id”是btn的類型,這裏是根據id找,所以不用改
   * Button btn = (Button) solo.getView(id);
   * solo.clickOnView(btn);
   *
   *4.2有個新方法,solo.getView("btn")是對上面的內容進行了封裝,更簡單了。
   * */
  Thread.sleep(1000);
  solo.enterText(0, "這只是個例子");
  Thread.sleep(1000);
  solo.pressSpinnerItem(0, 2);//(“0”)是第一個spinner,2是第二行。
  Thread.sleep(1000);
  solo.clickInList(2);//點第1個listView的第二行
  solo.clickOnButton("下一個");
  solo.sendKey(KeyEvent.KEYCODE_POWER);
  Thread.sleep(1000);

}

}

作爲一個例子,這裏,我只是簡單的寫了幾個函數。對於solo類中的一些重要的函數、

1、solo.sendKey(),這個方法,主要是一些系統定義的按鈕。如HOME,MENU,BACK,音量,還有鍵盤上的所有鍵。當然,它只能發命令,不能模似用戶點擊鍵盤。因爲點擊鍵盤會牽扯到跨進程操作。

2、isSearch...這一類的方法,主要是判斷一些控件是不是存在。

3.is..checked這一類的方法,主要是用來判斷一些可選的組件,如checkBox是不是被選中

……

第二種方法,當只有APK,沒有源碼時

創建測試工程。右鍵點擊TestedProject,new --> other --> android test project,點next -->輸入工程名(本人用TestProject),next -->注意這個界面有個單選按鈕,記得這裏不是選This Project,先萬注意,finish.

 創建工程之後,會出現一個空包,在包下建立類(我依舊用TestSettings)這個例子是我寫的測試settings模塊的例子,當然,依舊繼承的是ActivityInstrumentationTestCase2類。但是,這個時候,該類的代碼如下

public class TestSettings extends ActivityInstrumentationTestCase2{//這裏注意,後面沒有<Activity>
 
 private static final String PKG_NAME = "com.android.settings";//根目錄
 private static Class activityClass;
 private Solo solo;
 
 static{
  try {
   activityClass = Class.forName(PKG_NAME+".Settings");//你要測的類。當然,如果你的類是根目錄.xxx.Activity,那麼,這裏就寫activityClass = Class.forName(PKG_NAME+"xxx.Activity");
  } catch (ClassNotFoundException e) {
  }
 }

 public TestSettings() {
  super(PKG_NAME,activityClass);
 }
 
 @Override
 protected void setUp() throws Exception {
  solo = new Solo(getInstrumentation(), getActivity());
 }
 
 @Override
 protected void tearDown() throws Exception {
  solo.finishOpenedActivities();
 }

 public void testClick() throws InterruptedException {

//略

}

}

第二種方法,比第一種方法好的地方是不需要源碼也可以進行測試。但是,缺點很明顯,沒有界面,只能通過發指令或在eclipse中右鍵來啓動,不能像其它apk一樣運行,很不方便

第三種方法,正好解決這個問題。

這個工程其實就是一個一般的應用,建工程時,和其它工程也樣,也是建一個android application project.

工程建好之後,在main_activity.xml中,加入一個按鈕(本例中的控件id是settings).

在MainActivity中加入如下代碼,便可以在點擊這個按鈕後,啓動測試類,進行測試。測試完了,如果沒報錯,會返回至這個類。

此類的源碼如下(package com.settings.display.test 貼了出來!):

package com.settings.display.test;

public class MainActivity extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  ((Button) this.findViewById(R.id.settings))
    .setOnClickListener(new Button.OnClickListener() {
     @Override
     public void onClick(View v) {
      MainActivity.this
        .startInstrumentation(
          new ComponentName(
            "com.settings.display.test",//這個類的package,你要注意,讓它和AndroidManifest.xml中的 package="com.settings.display.test"一致,如果不一致,請你改成一致                                           
            "android.test.InstrumentationTestRunner"),//這裏不用改。這個參數,也是與AndroidManifest.xml中的android:name="android.test.InstrumentationTestRunner"一致的。請不要修改。
          null, null);
     }
    });
 }

}

AndroidManifest.xml中要做修改,源碼如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.settings.display.test"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.settings.display.test.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>
        <uses-library android:name="android.test.runner" /><!-- 注意,這裏是後來加入的,表明這個類是個測試類-->
    </application>
    <instrumentation android:targetPackage="com.android.settings"<!--這裏,是你要測的APK的根路徑,我測的是settings,所以,這裏寫的是settings的根路徑-->

           android:name="android.test.InstrumentationTestRunner" /><!-- 也注意這裏-->
</manifest>

這裏於一般的應用不一樣的地方在於加入了兩處代碼,功能也有說明:

1、 <uses-library android:name="android.test.runner" />

2、<instrumentation android:targetPackage="com.android.settings"<!--這裏,是你要測的APK的根路徑,我測的是settings,所以,這裏寫的是settings的根路徑-->

           android:name="android.test.InstrumentationTestRunner" /><!-- 也注意這裏-->

也請注意,這兩處代碼放的位置。一個是application的量,一個是manifest的量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章