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

Ada*_*dam 6 android unit-testing robolectric

这个问题非常类似于我想要做的事情:如何用Robolectric来影响PackageManager

但是,所有答案都依赖于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);
Run Code Online (Sandbox Code Playgroud)

但无济于事.有谁知道如何做到这一点?

Dav*_*vid 6

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

if (info != null) {
    return new ComponentName(
            info.activityInfo.applicationInfo.packageName,
            info.activityInfo.name);
}
Run Code Online (Sandbox Code Playgroud)

基于此,以下在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);
Run Code Online (Sandbox Code Playgroud)