• Android测试框架初步


    一、实验目的

    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 stub
    				mMessage.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 extends
    		ActivityInstrumentationTestCase2<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);
    	}
    	@UiThreadTest
    	public 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);
    		
    	}
    
    
    }
    

      

  • 相关阅读:
    SQL Server UPDATE JOIN
    visual studio 使用正则表达式实现代码批量查找和替换
    AngularJs
    Entity Framework Power Tools 执行数据库反向工程时报错....
    SVN-无法查看log,提示Want to go offline,时间显示1970问题
    windows server安装dotnet-sdk-2.2.108-win-x64.exe时报dll找不到
    いいい
    あああ
    datatable 行列转换
    .net生成随机验证码图片
  • 原文地址:https://www.cnblogs.com/common1140/p/4034114.html
Copyright © 2020-2023  润新知