【问题标题】:Can (should) robolectric be used to test Intent Filter可以(应该)使用 robolectric 来测试 Intent Filter
【发布时间】:2013-08-14 03:03:01
【问题描述】:

如果使用带有自定义方案的特定 URL,我有一个应用程序会启动特定活动。例如,如果在 web 视图中使用“myscheme://www.myapp.com/mypath”,我的应用程序就会启动。为此,我在清单中配置了意图过滤器:

<intent-filter>
    <action android:name="android.intent.action.View" />
    <data android:scheme="myscheme" android:host="www.myapp.com" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
</intent-filter>

我想通过编写单元测试来验证它是否有效并继续有效。

@Test   
public void testIntentHandling()
{
    Activity launcherActivity = new Activity();
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("myscheme://www.myapp.com/mypath"));
    launcherActivity.startActivity(intent);

    ShadowActivity shadowActivity = Robolectric.shadowOf(launcherActivity);
    Intent startedIntent = shadowActivity.getNextStartedActivity();
    ShadowIntent shadowIntent = Robolectric.shadowOf(startedIntent);
    assertNotNull(shadowIntent);
    System.out.println(shadowIntent.getAction());
    System.out.println(shadowIntent.getData().toString());
    System.out.println(shadowIntent.getComponent().toShortString());

    assertEquals("com.mycompany", shadowIntent.getComponent().getPackageName());
}

但是,这不起作用。我得到的是“shadowIntent.getComponent()”返回null,它应该返回指定我的应用程序和活动的组件。由于大部分工作是由 Android 系统完成的,而不是我的应用程序,假设 Robolectric 不模仿这一点是否公平,因此不能用于测试此功能?我是否可以假设我可以/应该对我的清单设置正确的天气进行单元测试?

谢谢。

【问题讨论】:

    标签: android unit-testing robolectric


    【解决方案1】:

    我不会以这种方式测试它。您基本上是在测试 Android 的一部分。

    我会进行一项测试,即您的AndroidManifest.xml 声明是否正确。而且我会进行一/两个测试来检查您的活动是否正确处理数据意图

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-19
      • 2012-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多