2012-05-22 76 views
1

我在做一個應用程序,需要開始測試其他應用程序。
IDEA是您從一個列表中選擇一個應用程序,然後選擇一個應用程序。例如:你選擇Facebook,然後測試登錄。 Facebook應用程序的測試用例開始(使用robotium黑盒測試)。
我創建了測試,如果我將它作爲Android JUnit從eclipse啓動,它會正常工作。但是我無法從我的應用程序啓動它。我認爲我可以使用某種意圖開始測試,但不能(因爲我在「管理應用程序」 - >「全部」中看到了測試)。我也嘗試使用廣播接收器 - 測試應用程序接收廣播,但是當我嘗試實例化測試時,構造函數需要調用super(TARGET_PACKAGE_ID,launcherActivityClass);公共靜態最終字符串TARGET_PACKAGE_ID =「com.facebook.katana」; public static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME =「com.facebook.katana.LoginActivity」;和我的應用程序崩潰:java.lang.ClassNotFoundException:com.facebook.katana.LoginActivity
有沒有人有任何ideea來解決這個問題?
謝謝。從活動中啓動Android JUnit

回答

0

我有這個問題,我的解決方案包括使用Java反射來獲取ActivityManagerNative,然後調用它的方法來啓動測試。

所以,我的代碼如下所示:

try { 
     Class<?> ActivityManagerNative = Class 
       .forName("android.app.ActivityManagerNative"); 
     Log.e("LOADED", "" + ActivityManagerNative); 
     Method getDefault = ActivityManagerNative.getMethod("getDefault", 
       (Class<?>[]) null); 
     Class<?> IActivityManager = Class 
       .forName("android.app.IActivityManager"); 
     Object am = IActivityManager.cast(getDefault.invoke(
       ActivityManagerNative, (Object[]) null)); 
     Class<?> IInstrumentationWatcher = Class 
       .forName("android.app.IInstrumentationWatcher"); 
     Method startInstrumentation = IActivityManager.getMethod(
       "startInstrumentation", ComponentName.class, String.class, 
       Integer.TYPE, Bundle.class, IInstrumentationWatcher); 
     ComponentName cn = ComponentName 
       .unflattenFromString("your.test.package/android.test.InstrumentationTestRunner"); 
     Bundle bundle = new Bundle(); 
     startInstrumentation.invoke(am, cn, null, 0, bundle, null); 
} catch (Exception e) { 
     e.printStackTrace(); 
} 

我不能充分信貸的代碼,我看到類似的東西的地方(用於其他目的,),但我不記得在哪裏。

基本上,代碼試圖從here模擬runInstrument

歡呼聲, Silviu