利用ActivityInstrumentationTestCase2测试Activity

 

测试 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
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值