赞
踩
android源码中引入了java单元测试的框架(android源码目录:libcore\junit\src\main\java\junit\framework中可见),然后在java单元测试框架的基础上扩展属于android自己的测试框架。android具体框架类的关系图如下:
从上图的类关系图中可以知道,通过android测试类可以实现对android中相关重要的组件进行测试(如Activity,Service,ContentProvider,甚至是application)。本次测试的是activity中的按键点击事件的测试用例:
一、新建一个 Android application project 项目--->MyButton
布局文件很简单 就一个按键控件:
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/hello_world" />
android:id="@+id/btn_test"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按键的单元测试"
/>
二、MainAtivity类文件代码:
很简单就是一个按键点击跳转动作,
public class MainActivity extends Activity {
private Button btnTest;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnTest = (Button)findViewById(R.id.btn_test);
btnTest.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.e("Android UnitTest","success!!!!!");
Intent i = new Intent(MainActivity.this,TestSuccess.class);
i.putExtra("userName", "你好 我是程序猿");
i.putExtra("what", "程序猿测试Android单元测试");
startActivity(i);
}
});
}
}
三、
TestSuccess.class 的代码:
public class TestSuccess extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.success);
Intent i = getIntent();
String userName = i.getStringExtra("userName");
String what = i.getStringExtra("what");
Log.e("TestSuccess", userName + "\n" + what);
TextView tv = (TextView)findViewById(R.id.tv);
tv.setText(userName + "\n" + what);
}
}
四、
TestSuccess 类的布局文件:
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#086767"
>
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="测试成功"
/>
五、创建测试项目工程:
选中其所在的android工程---->鼠标右键----->new---->Android Test Project----->输入测试工程名--->next----->选择被测试的目标android工程(此处为MyButton所在的android工程)。这样,一个测试工程就创建完成了。
通过eclipse创建自动生成的测试工程项目和android工程项目结构上没什么大的区别,主要是在AndroidManifest.xml中有变化,如下:
package="com.example.mybutton.test"
android:versionCode="1"
android:versionName="1.0" >
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.example.mybutton" />
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
这个配置文件随着建立测试项目工程自动配置不需要我们动手去配置。在AndroidManifest.xml注册了相关的测试环境(这些是android独有的):实现使用相关的运行测试类库,中的targetPackage为被测试类所在的包。
六、编写测试按键代码:
public class ButtonTest extends ActivityInstrumentationTestCase2{
private Instrumentation mInstrumentation;
private MainActivity mBtnTest;
public ButtonTest() {
super(MainActivity.class);
// TODO Auto-generated constructor stub
}
private Button btn;
//重写setUp方法,在该方法中进行相关的初始化操作
@Override
protected void setUp() throws Exception{
// TODO Auto-generated method stub
super.setUp();
mInstrumentation = getInstrumentation();
//获取被测试的FxLoginActivity
mBtnTest = getActivity();
btn = (Button)mBtnTest.findViewById(com.example.mybutton.R.id.btn_test);
}
//测试按钮
public void testLogin()
{
//开新线程,并通过该线程在实现在UI线程上执行操作
mInstrumentation.runOnMainSync(new Runnable()
{
@Override
public void run()
{
// TODO Auto-generated method stub
btn.requestFocus();
btn.performClick();
}
});
}
}
这里的测试方法
public void testLogin() 必须是 test开头 即:test + "xxxxx"
到此为止 测试项目就写好了,下一步就是可以运行测试了!!
七、运行测试:
启动android模拟器(也可以通过android手机)----->运行android工程----->在测试工程中选中测试类ButtonTest---->鼠标右键--->Run As---->Android Junit Test。这样,测试结果就可以在eclipse的Junit视图上显示了,如下图:
测试之后打印出来的信息:
"Android UnitTest","success!!!!!"
按键的测试案例就到此了,贴上项目代码下载地址:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。