8

カスタム スキームを持つ特定の URL が使用されている場合に、特定のアクティビティを起動するアプリがあります。たとえば、「myscheme://www.myapp.com/mypath」が Web ビューで使用されている場合、アプリが起動されます。これを行うには、マニフェストでインテント フィルターを次のように構成します。

<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 はこれを模倣しておらず、この機能をテストするために使用できないと想定するのは公正ですか? マニフェストが正しくセットアップされていることをユニットテストできる/すべきだと思いますか?

ありがとう。

4

1 に答える 1

0

私はこの方法でそれをテストしません。あなたは基本的に Android の一部をテストしています。

あなたのAndroidManifest.xml宣言が正しいという1つのテストがあります。そして、アクティビティがデータを使用してインテントを正しく処理していることを確認する 1 つまたは 2 つのテストがあります。

于 2015-09-11T05:45:54.373 に答える