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


更多相关文章

  1. TextView IME option
  2. [android]android自动化测试十之单元测试实例
  3. Android之permission权限列表
  4. Android:定时的实现
  5. Android自动解除系统锁屏
  6. Android—关于通知NotificationManager操作
  7. Android(安卓)获取控件高度宽度三种方法
  8. Android(安卓)UI 测试框架 Espresso
  9. Android(安卓)studio项目配置的.gitignore文件

随机推荐

  1. Java 网络编程(一) 网络基础知识
  2. Java反射相关(一)
  3. mybatis项目报java.sql.SQLException: Nu
  4. Java逐行读写TXT文件
  5. 如何在java中获得一个常量?
  6. 当月的开始和结束日期
  7. Windows中结束占用某个端口的进程
  8. 程序员的发展方向有哪些
  9. 学习流行的JavaScript框架20120727-[jQue
  10. 《你不知道的JavaScript