如果使用带有自定义方案的特定网址,我有一个启动特定活动的应用。例如,如果在webview中使用“myscheme://www.myapp.com/mypath”,我的应用程序就会启动。为此,我在清单中配置了intent过滤器:
<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不能模仿这个,所以不能用来测试这个功能吗?我是否可以假设我可以/应该单位测试天气我的清单设置正确吗?
感谢。
答案 0 :(得分:0)
我不会以这种方式测试它。您基本上是在测试Android的一部分。
我会有一个测试是你AndroidManifest.xml
声明是正确的。我会进行一到两次测试,检查您的活动是否正确处理了数据