Tôi có một ứng dụng khởi chạy một hoạt động cụ thể nếu một URL nhất định có lược đồ tùy chỉnh được sử dụng. Ví dụ: nếu "myscheme: //www.myapp.com/mypath" được sử dụng trong chế độ xem web, ứng dụng của tôi được khởi chạy. Để thực hiện việc này, tôi định cấu hình bộ lọc ý định trong tệp kê khai như vậy:Có thể sử dụng robolectric để kiểm tra Intent Filter
<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>
Tôi muốn xác minh rằng bộ lọc này hoạt động và tiếp tục hoạt động bằng cách viết kiểm tra đơn vị.
@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());
}
Tuy nhiên, điều này không có tác dụng. Những gì tôi nhận được là "shadowIntent.getComponent()" trả về null, khi nó sẽ trả về thành phần xác định ứng dụng và hoạt động của tôi. Vì hầu hết công việc này được thực hiện bởi hệ thống Android, không phải ứng dụng của tôi, có công bằng khi cho rằng Robolectric không bắt chước điều này, và vì vậy không thể được sử dụng để kiểm tra tính năng này? Tôi có quyền giả sử tôi có thể/nên đơn vị kiểm tra thời tiết biểu hiện của tôi được thiết lập chính xác?
Cảm ơn.