我正在做一个需要开始测试其他应用的应用
想法是你选择一个应用程序(从列表中),然后选择一个测试用例。例如:您选择Facebook然后测试登录。 Facebook应用程序的测试用例开始(使用robotium黑盒测试)
我创建了测试,如果我从eclipse作为Android JUnit启动它,它工作正常。但是,我不能从我的应用程序启动它。我认为我可以使用一些意图开始测试但不能(我试过这个,因为我在Manage Apps中看到了测试 - > All)。我也试过使用广播接收器 - 测试应用接收广播,但是当我尝试实例化测试时,构造函数需要调用super(TARGET_PACKAGE_ID,launcherActivityClass); public static final String 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
有没有人有任何想法来解决这个问题?
感谢。
答案 0 :(得分: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
。
干杯, 西尔维乌