测试 Activity

Android ,用来测试 activity ActivityInstrumentationTestCase2

以一个简单 的程序来 的使用方法以及 Android 测试 流程

首先是程序界面 :两个文本框 ,一个 Spinner,两个按 , Reset钮进 测试 ,按下 Reset ,所有控件状 复为进 Activity 的状 .如果有文本框不 ,么测试 ,Reset的按 事件没有起到作用 .

下面看一下我们的测试类:

新建一个 , 承自 ActivityInstrumentationTestCase2 :

package com.zhang.test.login.test;

import android.test.ActivityInstrumentationTestCase2;

public class TestInput extends ActivityInstrumentationTestCase2 {

}

eclipse中已 加入了被 程序的源 ,所以 在可以直接使用 LoginApplication中的任何 。( 单击 LoginApplicationTest->Properties->Java Build Path->Projects, Add找到被 程序的工程 LoginApplication, 中加入到 测试 工程

修改完成后的 TestInput :

package com.zhang.test.login.test;

import android.test.ActivityInstrumentationTestCase2;

import com.zhang.test.login.MainActivity;

public class TestInput extends ActivityInstrumentationTestCase2 {

public TestInput() {

super("com.zhang.test.login", MainActivity.class);

}

@Override

protected void setUp() throws Exception {

super.setUp();

}

@Override

protected void tearDown() throws Exception {

super.tearDown();

}

}

具体编写 参考文档中的 :Resources->Tutorials->Hello Testing (最新版 2.2文档 ),文档目 :/docs /resources/tutorials/testing/helloandroid_test.html

, ,就可以 测试 用例了 !

Activity 测试 ,无非就是 送按 ,或者直接通过给 某些控件的方法控制事件 ,以及需要等待的 线 行睡眠 :

送按 a

sendKeys(KeyEvent.KEYCODE_A);

送按 数字 0

sendKeys(KeyEvent.KEYCODE_0);

2500毫秒

SystenClock.sleep(2500);

有些 候需要在主 线 程中运行方法 ,使用

getInstrumentation().runOnMainSync(new Runnable() {

@Override

public void run() {

//文本框控件 取焦点

mText.requestFocus();

//文本框控件点 事件

mText.performClick();

}

});

测试 用例的最后 ,需要对测试结 行断言 ,使用 junit原生的 assert系列方法对结 行断言即可 .

完整的代 :

package com.zhang.test.login.test;

import android.app.Activity;

import android.os.SystemClock;

import android.test.ActivityInstrumentationTestCase2;

import android.util.Log;

import android.view.KeyEvent;

import android.widget.Button;

import android.widget.EditText;

import android.widget.Spinner;

import com.zhang.test.login.MainActivity;

import com.zhang.test.login.R;

public class TestInput extends ActivityInstrumentationTestCase2 {

private static final String TAG = "TestInput";

private Activity mActivity;

private Button mButtonReset;

private EditText mUsername, mPassword;

private Spinner mSpinner;

public TestInput() {

super("com.zhang.test.login", MainActivity.class);

}

@Override

protected void setUp() throws Exception {

super.setUp();

mActivity = getActivity();

mUsername = (EditText) mActivity.findViewById(R.id.txt_username);

mPassword = (EditText) mActivity.findViewById(R.id.txt_password);

mSpinner = (Spinner) mActivity.findViewById(R.id.spinner_gender);

mButtonReset = (Button) mActivity.findViewById(R.id.btn_reset);

}

@Override

protected void tearDown() throws Exception {

super.tearDown();

}

public void testInput() {

boolean pass = false;

//username文本框 取焦点 , 运行在主 线 程中 ,故使用如下方法 :

getInstrumentation().runOnMainSync(new Runnable() {

@Override

public void run() {

mUsername.requestFocus();

}

});

getInstrumentation().waitForIdleSync();

sendKeys(KeyEvent.KEYCODE_A);

sendKeys(KeyEvent.KEYCODE_0);

sendKeys(KeyEvent.KEYCODE_1);

sendKeys(KeyEvent.KEYCODE_2);

// 2

SystemClock.sleep(2000);

//同上

getInstrumentation().runOnMainSync(new Runnable() {

@Override

public void run() {

mPassword.requestFocus();

}

});

getInstrumentation().waitForIdleSync();

sendKeys(KeyEvent.KEYCODE_A);

sendKeys(KeyEvent.KEYCODE_0);

sendKeys(KeyEvent.KEYCODE_1);

sendKeys(KeyEvent.KEYCODE_2);

getInstrumentation().runOnMainSync(new Runnable() {

@Override

public void run() {

mSpinner.requestFocus();

mSpinner.performClick();

}

});

getInstrumentation().waitForIdleSync();

//往下 2 ,再按中 确定

sendKeys(KeyEvent.KEYCODE_DPAD_DOWN);

sendKeys(KeyEvent.KEYCODE_DPAD_DOWN);

sendKeys(KeyEvent.KEYCODE_DPAD_CENTER);

SystemClock.sleep(1000);

//按下 reset,最后检查 是否已重置

getInstrumentation().runOnMainSync(new Runnable() {

@Override

public void run() {

mButtonReset.requestFocus();

mButtonReset.performClick();

}

});

getInstrumentation().waitForIdleSync();

SystemClock.sleep(1000);

Log.d(TAG, "username:" + mUsername.getText().toString().equals(""));

Log.d(TAG, "Password:" + mPassword.getText().toString().equals(""));

Log.d(TAG, "username:" + mSpinner.getSelectedItemPosition());

// 行断言

assertEquals("Username text not null!", "", mUsername.getText().toString());

assertEquals("Password text not null!", "", mPassword.getText().toString());

assertEquals("Gender selection error!", 0, mSpinner.getSelectedItemPosition());

}

}

测试 方法

命令行 :

adb shell am instrument -w com.zhang.test.login.test/android.test.InstrumentationTestRunner

命令使用方法请查 看文档 :/docs/guide/developing/testing/testing_otheride.html

测试结 :

测试 正常用一个 . 来表示

异常用 .E

测试 .F

更多相关文章

  1. android开发之Parcelable使用详解
  2. android sample之Notepad(带下划线的TestView)
  3. Android设置中“强行停止”详解
  4. Android绘图基础:Canvas、Paint等的使用
  5. android中URI简介
  6. Android多媒体开发(4)——添加FFmpeg支持
  7. 【转】Android(安卓)APP性能及专项测试(个人整理)
  8. Android(安卓)NDK开发:JNI基础篇
  9. MediaStore与Media.EXTERNAL_CONTENT_URI

随机推荐

  1. android中如何美化ListView的背景
  2. 如何使用Android Studio打开一个App项目,
  3. 简单的Android视频转码器[1]:把FFMpeg移
  4. android 内存泄露
  5. Android 读写xml文件
  6. Android 主线程到底是什么、如何抛出ANR
  7. Android(安卓)Launcher研究(四)---------
  8. android 百度地图系列之地图初始化及定位
  9. Android中如何制作游戏的启动菜单
  10. Android中存取简单的数据