我的 Android 应用程序有一个简单的方法来触发显示 URL 的意图。
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
。我还尝试隐藏 Application 上下文并返回一个具体的StubPackageManager
,但得到了相同的结果。也许我一直在搜索/盯着太久 - 有没有更好的方法来单元测试这个方法?