最简单的三种不同创建方法

最简单的三种不同创建方法:

先创建一个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的量。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值