介紹
要測試apk程序必須和我們編寫的測試程序擁有相同的簽名(signature)。如果沒有apk程序的簽名秘鑰,就要去除apk程序的簽名,然後再使用自己的key對其簽名(這壹步中,我們可以使用debug key),已經有現成的工具可用,下載地址re-sign.jar,這個工具可以去掉apk程序的原簽名,然後使用我們自己的debug key對其簽名。
詳細
編寫測試用例之前,我們需要知道apk程序的包名(package name)和啟動頁面名稱(launcher activity name),這兩個名稱我們可以通過程序啟動時的日誌(adb logcat)來獲取。程序日誌會打印出包名和activity名稱。 日誌格式類似於:Starting activity: Intent { act=android.intent.action.MAIN cat=android.intent.category.LAUNCHER? flg=0x10200000 cmp=com.example.android.notepad/.NotesList。
上面的日誌表明程序包名為:com.example.android.notepad、啟動activity名為:com.example.android.notepad.NotesList,這裏的activity name就是下面代碼中的LAUNCHER_ACTIVITYFULLCLASSNAME。
下面是測試代碼的例子:
package com.yourcompany.yourtestname;
import com.jayway.android.robotium.solo.Solo;
import android.test.ActivityInstrumentationTestCase2;
@SuppressWarnings("rawtypes")
public class ReallyBlackboxTest extends ActivityInstrumentationTestCase2 {
private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME = "com.newsrob.DashboardListActivity";
private static Class<?> launcherActivityClass;
static{
try {
launcherActivityClass = Class.forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
@SuppressWarnings("unchecked")
public ReallyBlackboxTest() throws ClassNotFoundException {
super(launcherActivityClass);
}
private Solo solo;
@Override
protected void setUp() throws Exception {
solo = new Solo(getInstrumentation(), getActivity());
}
public void testCanOpenSettings(){
solo.pressMenuItem(0);
}
@Override
public void tearDown() throws Exception {
solo.finishOpenedActivities();
}
}