My Android application has a simple method to fire off an intent to display a 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();
}
}
I'm using Robolectric for unit testing but I'm having trouble verifying this method. Specifically, getPackageManager()
is always returning null. How I can shadow the PackageManager
? I tried creating a ShadowPackageManager
and calling bindShadowClass
, but none of my code gets executed - getPackageManager()
always returns null
. I also tried to Shadow the Application context and return a concrete StubPackageManager
, but got the same results.
Maybe I've been searching/staring too long - is there a better way to unit test this method?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…