我正在做一个需要开始测试其他应用程序的应用程序。
想法是您选择一个应用程序(从列表中),然后为它选择一个测试用例。例如:您选择 facebook,然后测试登录。facebook 应用程序的测试用例开始(使用机器人黑盒测试)。
我创建了测试,如果我从 eclipse 作为 Android JUnit 启动它,它工作正常。但是我无法从我的应用程序启动它。我认为我可以使用某种意图开始测试但不能(我尝试了这个,因为我在 Manage Apps->All 中看到了测试)。我也尝试使用广播接收器 - 测试应用程序接收广播,但是当我尝试实例化测试时,构造函数需要调用 super(TARGET_PACKAGE_ID, launcherActivityClass); 其中 public static final String TARGET_PACKAGE_ID = "com.facebook.katana"; 公共静态最终字符串 LAUNCHER_ACTIVITY_FULL_CLASSNAME = "com.facebook.katana.LoginActivity"; 我的应用程序崩溃了: java.lang.ClassNotFoundException: com.facebook.katana.LoginActivity
有没有人有任何想法来解决这个问题?
谢谢。
问问题
561 次
1 回答
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();
}
我不能完全相信代码,我在某个地方看到了类似的东西(用于其他目的),但我不记得在哪里。
基本上,代码试图runInstrument
从这里模拟。
干杯,西尔维乌
于 2012-05-23T09:40:04.243 回答