У моего 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
, но получил те же результаты.
Возможно, я слишком долго искал/смотрел - есть ли лучший способ unit test использовать этот метод?