【发布时间】:2012-10-15 19:38:08
【问题描述】:
我的 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。我还尝试隐藏应用程序上下文并返回一个具体的StubPackageManager,但得到了相同的结果。
也许我一直在搜索/盯着太久 - 有没有更好的方法来单元测试这个方法?
【问题讨论】:
-
哪个上下文用于调用getPackageManager?你试过 getApplicationContext().getPackageManager()
标签: android shadow robolectric