建立一個android工程:d_session;它有一個activity:d_sessionactivity;package名:com.mysession
二.測試工程:
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;
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() {
clickbutton(r.id.btnload);
clickbutton(r.id.btnhistory);
測試類二:
public class mycase2 extends sessionactivitytest{
public void testcase2() {
三. 有些動作(如點選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();
最新内容請見作者的github頁:http://qaseven.github.io/