原生测试框架实践2——Mr.Monkey 移动测试培训课后总结(八)

2012-12-26  白云 

这节课仍然以android原生的项目为例,被测工程为spinner,测试工程为spinner test。
一、instrumentation下有公共的方法:
  1. getActivity()
  2. setActivityInitialTouchMode():是公共的方法,初始化时被调用,为了让点击或者滑动等方法生效,必须将TouchMode的布尔值设成false,接下来所有的方法再按照正常的点击或者滑动向下进行。
  3. setActivityIntent()

二、被测工程讲解:

对这个Activity做一个onCreate的重写:

Spinner spinner = (Spinner) findViewById(R.id.Spinner01);     //定义一个Spinner控件

this.mAdapter = ArrayAdapter.createFromResource(this,R.array.Planets,android.R.layout.simple_spinner_dropdown_item); //对于list或者类似菜单一样滚动的控件来讲都要设置Adapter,这个Adapter相当于把菜单中的所有项看成一个整体

OnItemSelectedListener spinnerListenr = new myOnItemSelectedListener(this, this.mAdapter); //创建一个对象监听刚刚创建的Adapter

spinner.setOnItemSelecedListener(spinnerListener); //将这个监听器绑定设置在刚刚创建的spinner对象上

三、创建测试用例构造函数

import被测工程,按照测试框架需要建造一个SpinneActivity构造函数,告诉测试程序所指定的包名和测试的Activity(super后的两个参数)。

mActivity = getActivity();

mSpinner = (Spinner) mActivity.findViewById(com.android.example.spinner.R.id.Spinner01); //绑定被测工程的一个控件

mPlanetData = mSpinner.getAdapter(); //测试工程与被测工程的控件对象绑定

四、测试函数

assertTrue(mSpinner.getOnItemSelectedListener() !=null); // 是否设置了一个Listener,这个Listener是否存在

assertTrue(mPlanetData != null); //判断Spinner Adaper的对象是否为空

assertEquals(mPlanetData.getCount(),ADAPTER_COUNT); //Spinner Adapter的总数

五、SpinnerUI的测试

mActivity.runOnUiThread()  //对于被测对象UI上的测试来讲,都要跑在一个UI线程上,这里起了一个新的UI线程

public void run()   //在UI线程上跑的测试

mSpinner.requestFocus(); //对一个控件做某些操作,首先要聚焦到控件上

mSpinner.setSelection(INITIAL_POSITION);

mPos = mSpinner.getSelectedItemPosition(); //取得当前选择的Item的位置

mSelection = (String)mSpinner.getItemAtPosition(mPos); //取得在mPos这个位置的字符串

TextView resultView = (TextView) mActivity.findViewById(

 com.android.example.spinner.R.id.SpinnerResult); //在被测程序有一个TextView,新建对象resultView,与被测控件做关联

String resultText = (String) resultView.getText();  //将该控件的值赋给resultText

assertEquals (resultText,mSelection); //spanner上选择的值与resultView这个控件的值做比较,选择的值要显示在resultView这个控件上

六、测试方法testStatePause

Instrumentation mInstr = this.getInstrumentation(); //创建一个Instrumentation对象,该对象能用Instrumentation下的所有方法

mActivity.setSpinnerPosition(TEST_PAUSE_POSITION); //设置位置

mActivity.setSpinnerSelection(TEST_STATE_PAUSE_SELECTION); //设置字符串

mInstr.callActivityOnPause(mActivity); //对Activity做onPause操作

mActivity.setSpinnerPosition(0); // 设位置为0

mActivity.setSpinnerSelection(""); //

mInstr.callActivityOnResume(mActivity); 对Activity做onResume操作

int currentPositon = mActivity.getSpinnerPosition();

String currentSelection = mActivity.getSpinnerSelection(); //再获取位置和字符串

对比onPause和onResume两个操作前后位置和字符串的值

需要将测试工程中创立的对象用findViewById与主程序apk中的控件进行绑定,有了关联后再针对测试对象做操作,这样操作才会生效,根据用例测什么地方做什么操作,最后会得到两个值或两个状态,对这两个值或状态做比较。


429°/4292 人阅读/0 条评论 发表评论

登录 后发表评论