灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2568回复:0

android jUnit test 进行自动化测试

楼主#
更多 发布于:2012-09-06 13:43

一. 被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();


喜欢0 评分0
游客

返回顶部