android - 将解析信息添加到 Robolectric 包管理器

标签 android unit-testing robolectric

这个 SO 问题与我想做的非常相似:How can I shadow the PackageManager with Robolectric

然而,所有的答案都依赖于ShadowApplication.setPackageManager()。在2.2中,这个方法好像已经不存在了:http://robolectric.org/javadoc/org/robolectric/shadows/ShadowApplication.html

我试图只获取包管理器并添加解析信息:

    RobolectricPackageManager packageManager = (RobolectricPackageManager) Robolectric.application.getPackageManager();
    Intent intent = new Intent(Intent.ACTION_MAIN,null);
    intent.addCategory(Intent.CATEGORY_HOME);
    ResolveInfo ri = new ResolveInfo();
    ActivityInfo ai = new ActivityInfo();
    ai.packageName = "com.fun.test";
    ri.activityInfo = ai;
    ri.isDefault = true;
    packageManager.addResolveInfoForIntent(intent, ri);

但是没有用。有谁知道如何做到这一点?

最佳答案

Intent.resolveActivity 期望 ResolveInfo 具有以下内容:

if (info != null) {
    return new ComponentName(
            info.activityInfo.applicationInfo.packageName,
            info.activityInfo.name);
}

因此,基于此,以下内容适用于 Robolectric 2.3:

RobolectricPackageManager packageManager = (RobolectricPackageManager) shadowOf(Robolectric.application).getPackageManager();
Intent intent = ... //create an Intent like the one you want to resolve

ResolveInfo info = new ResolveInfo();
info.isDefault = true;

ApplicationInfo applicationInfo = new ApplicationInfo();
applicationInfo.packageName = "com.example";
info.activityInfo = new ActivityInfo();
info.activityInfo.applicationInfo = applicationInfo;
info.activityInfo.name = "Example";

packageManager.addResolveInfoForIntent(intent, info);

关于android - 将解析信息添加到 Robolectric 包管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21638455/

相关文章:

c++ - 如何在我的 C++ 项目中包含 *.cpp 文件?

robolectric java.lang.NoSuchFieldException : sSystem

android - 是否可以创建一个 Android 应用程序来使手机以 kiosk 模式运行?

android - Android 4.0 中日历的位置是什么?

android - 使用 AppWidgetManager 的 updateAppWidgetOptions 方法来存储每个小部件的自定义选项

java - Android 测试 - Robolectric + Mockito + Retrofit 出现 Wanted 但未调用错误

android - Robolectric AndroidX fragment NoClassDefFoundError

android - 自定义 ListView 从中间开始

android - 如何在 Android 上使用 Hamcrest 匹配器和 jUnit

java - 正在测试的同一类中的模拟私有(private)方法