[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);
}
複製程式碼