標籤:android blog http io os ar 使用 java for
一、實驗目的
1.掌握android測試專案的建立
2.掌握android測試架構的基本內容
3.編寫運行android測試
二、實驗內容與步驟
建立android項目MyProject,運行如下:
l 點擊ok按鈕,EditText內字母變大寫
l 點擊超連結,開啟瀏覽器上網
請用知識對本項目進行測試,要求:
1、對組件進行對齊測試(assertOnScreen和assertRightAligned方法)
2、對EditText進行傳值測試(使用sendKeys 和 sendRepeatedKeys兩種方法)
3、對Button進行功能測試(performClick和sendKeys方法)
4、對超連結進行測試(ActivityMonitor內部類)
5、為了保證測試的完整性和準確性,請適當添加必要的功能(如先決條件,多種方法等)
註:建立android測試專案過程如下
1、建立android測試專案
2、建立好測試專案之後,在測試專案中的src目錄下,右鍵點擊你建立的包,依次選擇建立—>JUnit Test Case,彈出如下介面:
//代碼
package com.sise.zhw;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;public class MyProjectActivity extends Activity { /** Called when the activity is first created. */private EditText mMessage;private Button mok; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mMessage=(EditText)findViewById(R.id.message); mok=(Button)findViewById(R.id.ok); mok.setOnClickListener(new OnClickListener(){public void onClick(View v){// TODO Auto-generated method stubmMessage.setText(mMessage.getText().toString().toUpperCase());}}); }}
//布局檔案
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" ><ImageView android:layout_width="wrap_content" android:id="@+id/imageView1" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" android:layout_marginBottom="6dip" android:layout_gravity="center_horizontal" android:layout_marginTop="20dip" /><TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="MyFirstProjectTest" android:layout_gravity="center" /><TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="www.sise.com.cn" android:layout_gravity="center" android:autoLink="web" android:id="@+id/link" android:textSize="18sp" /><EditText android:layout_height="wrap_content" android:layout_width="fill_parent" android:layout_marginBottom="0dip" android:layout_marginLeft="6dip" android:layout_marginRight="6dip" android:layout_marginTop="24dip" android:hint="sise" android:id="@+id/message" android:maxLines="1" /><Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right" android:layout_margin="6dip" android:paddingLeft="24dip" android:paddingRight="24dip" android:text="ok" android:id="@+id/ok" /></LinearLayout>
//測試代碼
package com.sise.zhw.test;import static android.test.MoreAsserts.assertNotContainsRegex;import static android.test.ViewAsserts.assertOnScreen;import static android.test.ViewAsserts.assertRightAligned;import com.sise.zhw.MyProjectActivity;import android.app.Instrumentation;import android.app.Instrumentation.ActivityMonitor;import android.content.Intent;import android.content.IntentFilter;import android.test.ActivityInstrumentationTestCase2;import android.test.TouchUtils;import android.test.UiThreadTest;import android.view.KeyEvent;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;public class MyFirstProjectActivityTests extendsActivityInstrumentationTestCase2<MyProjectActivity> {private MyProjectActivity mActivity;private EditText mMessage;private Button mCapitalize;private TextView mLink;private Instrumentation mInstrumentation;public MyFirstProjectActivityTests() {this("MyFirstProjectActivityTests");}public MyFirstProjectActivityTests(String name) {super(MyProjectActivity.class);setName(name);}protected void setUp() throws Exception {super.setUp();setActivityInitialTouchMode(false);mActivity = getActivity();mInstrumentation = getInstrumentation();mLink = (TextView)mActivity.findViewById(com.sise.zhw.R.id.link);mMessage = (EditText)mActivity.findViewById(com.sise.zhw.R.id.message);mCapitalize = (Button)mActivity.findViewById(com.sise.zhw.R.id.ok);}protected void tearDown() throws Exception {super.tearDown();}public void testPreConditions() {assertNotNull(mActivity);assertNotNull(mInstrumentation);assertNotNull(mLink);assertNotNull(mMessage);assertNotNull(mCapitalize);}public void testAlignment() {final int margin = 0;assertRightAligned(mMessage, mCapitalize, margin);}public void testUserInterfaceLayout() {final int margin = 0;final View origin = mActivity.getWindow().getDecorView();assertOnScreen(origin, mMessage);assertOnScreen(origin, mCapitalize);assertRightAligned(mMessage, mCapitalize, margin);}public void testUserInterfaceLayoutWithOtherOrigin() {final int margin = 0;View origin = mMessage.getRootView();assertOnScreen(origin, mMessage);origin = mCapitalize.getRootView();assertOnScreen(origin, mCapitalize);assertRightAligned(mMessage, mCapitalize, margin);}@UiThreadTestpublic void testNoErrorInCapitalization() {final String msg = "this is a sample";mMessage.setText(msg);mCapitalize.performClick();final String actual = mMessage.getText().toString();final String notExpectedRegexp = "(?i:ERROR)";assertNotContainsRegex("Capitalization found error:", notExpectedRegexp, actual);}public void testFollowLink() {final Instrumentation inst = getInstrumentation();IntentFilter intentFilter = new IntentFilter(Intent.ACTION_VIEW);intentFilter.addDataScheme("http");intentFilter.addCategory(Intent.CATEGORY_BROWSABLE);ActivityMonitor monitor = inst.addMonitor(intentFilter, null, false);assertEquals(0, monitor.getHits());TouchUtils.clickView(this, mLink);monitor.waitForActivityWithTimeout(5000);assertEquals(1, monitor.getHits());inst.removeMonitor(monitor);}private void requestMessageFocus() {try {runTestOnUiThread(new Runnable() {public void run() {mMessage.requestFocus();}});} catch (Throwable e) {fail("Couldn‘t set focus");}mInstrumentation.waitForIdleSync();}public void testSendKeyInts() {requestMessageFocus();sendKeys(KeyEvent.KEYCODE_H,KeyEvent.KEYCODE_E,KeyEvent.KEYCODE_E,KeyEvent.KEYCODE_E,KeyEvent.KEYCODE_Y,KeyEvent.KEYCODE_ALT_LEFT,KeyEvent.KEYCODE_1,KeyEvent.KEYCODE_DPAD_DOWN,KeyEvent.KEYCODE_ENTER);final String expected = "HEEEY!";final String actual = mMessage.getText().toString();assertEquals(expected, actual);}public void testSendKeyString() {requestMessageFocus();sendKeys("H 3*E Y ALT_LEFT 1 DPAD_DOWN ENTER");final String expected = "HEEEY!";final String actual = mMessage.getText().toString();assertEquals(expected, actual);}public void testSendRepeatedKeys() {requestMessageFocus();sendRepeatedKeys(1, KeyEvent.KEYCODE_H,3, KeyEvent.KEYCODE_E,1, KeyEvent.KEYCODE_Y,1, KeyEvent.KEYCODE_ALT_LEFT,1, KeyEvent.KEYCODE_1,1, KeyEvent.KEYCODE_DPAD_DOWN,1, KeyEvent.KEYCODE_ENTER);final String expected = "HEEEY!";final String actual = mMessage.getText().toString();assertEquals(expected, actual);}public void testCapitalizationSendingKeys() {final String keysSequence = "T E S T SPACE M E";requestMessageFocus();sendKeys(keysSequence);TouchUtils.clickView(this, mCapitalize);final String expected = "test me".toUpperCase();final String actual = mMessage.getText().toString();assertEquals(expected, actual);}public void testActivityPermission(){final String PKG="com.sise.zhw";final String ACTIVITY=PKG+".MyContactsActivity";final String PERMISSION="android.MainFest.permission.CALL_PHONE";//assertActivityRequiresPermission(PKG,ACTIVITY,PERMISSION);}}
Android測試架構初步