gpt4 book ai didi

android - 如何使用 Robolectric 隐藏 PackageManager

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:20:45 31 4
gpt4 key购买 nike

我的 Android 应用程序有一个简单的方法来触发显示 URL 的 Intent 。

protected void launchBrowser(int id)
{
Uri uri = Uri.parse( getString( id ) );
Intent intent = new Intent( ACTION_VIEW, uri);

PackageManager packageManager = getPackageManager();
List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0);
if (activities.size() > 0)
{
startActivity(intent);
}
else
{
Toast.makeText(getApplicationContext(),
"ERROR - no application to display a web page",
Toast.LENGTH_SHORT).show();
}
}

我正在使用 Robolectric 进行单元测试,但我无法验证此方法。具体来说,getPackageManager() 总是返回 null。我如何隐藏 PackageManager?我尝试创建一个 ShadowPackageManager 并调用 bindShadowClass,但是我的代码都没有被执行 - getPackageManager() 总是返回 null。我还尝试隐藏应用程序上下文并返回具体的 StubPackageManager,但得到了相同的结果。也许我一直在寻找/盯着太久 - 是否有更好的方法来对该方法进行单元测试?

最佳答案

我为此使用 Robolectric 2.3。如其他答案所述,getPackageManager() 不返回 null,但 shadowApplication.setPackageManager 不再存在。

因为你不能模拟 PackageManager,你不能给它一个 Intents 的列表来解析。幸运的是,Robolectric 的 PackageManager 子类 RobolectricPackageManager 可以让您无需模拟即可添加这些 Intent :

RobolectricPackageManager rpm = (RobolectricPackageManager)Robolectric.application.getPackageManager();
rpm.addResolveInfoForIntent(new Intent(Settings.ACTION_APPLICATION_DEVELOPMENT_SETTINGS), new ResolveInfo());

关于android - 如何使用 Robolectric 隐藏 PackageManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12902777/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com