天天看点

Android JUnit test 进行自动化测试

  新建一个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/

继续阅读