[TOC]
资源
- UPDATED GUIDE TO ANDROID UNIT TESTING
介绍了src目录下三个目录的作用,但是我用的
android studio 2.0 preview 6中的build variants中默认已经没有了test artifact选项了; - Android测试初探 这几篇蛮全的了
- 在Android Studio中进行单元测试和UI测试
- as 2.0 Preview 5
简单说到了在这个版本中默认启用了两种test,可以通过如下方式开启(取消勾选):

基本操作
概念对应
Test Artifact 选择不同的类型,测试用例要放在不同的目录下:
- Android Instrumentation Tests -->
src/androidTest - Unit Tests -->
src/test
Instrumentation test
经常都需要在机器上测试,调用到android代码等,我们选用 Instrumentation ;
直接看例子:
- 创建测试Activity,假设叫
MainActivity; - 在
MainActivity类源码中右键go to -- test(ctrl+shift+t),选择junit3,会在src/androidTest/下生成MainActivityTest,修改其父类为ActivityInstrumentationTestCase2:
public class MainActivityTest extends ActivityInstrumentationTestCase2 {
public MainActivityTest() {
super(MainActivity.class); // 会创建MainActivity实例
}
public void testShowToast() throws Throwable {
final Context context = getActivity();
//通过getInstrumentation()方法获取Instrumentation对象,从而可以给APP发送用户操作事件
runTestOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(context, "Test ", Toast.LENGTH_LONG).show();
}
});
Thread.sleep(5000);
}
}
- 运行该测试用例,即可看到toast;
调用Activity生命周期
andorid系统没有提供直接调用生命周期的方法,我们可以酱紫做:
//传入页面对象,其他生命周期方法类似
getInstrumentation().callActivityOnPause(activity);
测试listview点击事件
// 正常activity中的listivew事件
ListView lv = (ListView) findViewById(R.id.lv);
lv.setAdapter(new MyAdapter());
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
TextView tv = (TextView) view.findViewById(android.R.id.text1);
Toast.makeText(UnitActivity.this, tv.getText() + " == ", Toast.LENGTH_SHORT).show();
}
});
//适配器类
class Adapter extends BaseAdapter {
......
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = getLayoutInflater().inflate(android.R.layout.simple_list_item_1, null, false);
TextView tv = (TextView) convertView.findViewById(android.R.id.text1);
tv.setText("hello listview " + position);
return convertView;
}
}
// 单元测试用例: test类,然后右键 run testListView 即可看到
public void testListView() throws Throwable {
Activity mAct = getActivity();
ListView lv = (ListView) mAct.findViewById(R.id.lv);
runTestOnUiThread(() -> { // 注意只能在ui线程中进行事件操作
lv.performItemClick(lv.getChildAt(0), 0, lv.getItemIdAtPosition(0));
});
Thread.sleep(5000);
}