web-dev-qa-db-ja.com

Espresso-ボタンを押す意図を使用して、どのアクティビティが開いているかを確認しますか?

特定のボタンを押した後に開いているアクティビティを追跡することはできますか?
ボタンがクリックされた/押されたときサーバーにリクエストを送信のテストがあります。リクエストが送信されるまでアクティビティを開きます正常に実行されたことを確認するにはテストの場合、開いているアクティビティを確認する必要があります。

私のテストの例:

Espressoで開いているインテントを確認してください---

 private void startTest() {
    recreateAuthData(InstrumentationRegistry.getTargetContext(), "d78269d9-9e00-4b8d-9242-815204b0a2f6", "3f32da21-914d-4adc-b6a1-891b842a2972");

    InstrumentationRegistry.getTargetContext().getSharedPreferences(ActivitySplashScreen.class.getSimpleName(),
            Context.MODE_PRIVATE).edit().putInt(ActivitySplashScreen.PROPERTY_APP_VERSION, ActivitySplashScreen.getAppVersion(InstrumentationRegistry.getTargetContext())).commit();
    InstrumentationRegistry.getTargetContext().getSharedPreferences(ActivitySplashScreen.class.getSimpleName(),
            Context.MODE_PRIVATE).edit().putString(ActivitySplashScreen.PROPERTY_REG_ID, "testKey").commit();

    mActivityRule.launchActivity(setIntent());
    // inputPinCode("2794");
}

@Test
public void testIdent() {
    startTest();
    onView(withText("ПРО")).perform(click());
    putDelay(500);
    onView(withId(R.id.get_pro)).perform(click());
    onView(withText("Авторизация по паспортным данным")).perform(click());
    putDelay(500);
    closeSoftKeyboard();
    onView(withId(R.id.btn_goto_passport)).perform(click());
    onView(withHint("Серия и номер паспорта")).perform(replaceText("9894657891"));
    onView(withHint("Дата выдачи паспорта")).perform(replaceText("17032014"));
    onView(withHint("Дата рождения")).perform(replaceText("31091994"));
    onView(withHint("СНИЛС")).perform(replaceText("54665285919"));
    putDelay(500);
    Log.d("TestWidget", hasComponent(hasShortClassName("ActivityMain")).toString());
    onView(withId(R.id.btn_next)).perform(click());
    // some code which check which activity is display now
    putDelay(500);

}
8
metalink

ボタンを押した後に開いたアクティビティを追跡することは可能ですか?

espresso-intentsライブラリを確認:

構成

app/build.gradleこれらの行に追加:

androidTestCompile 'com.Android.support.test:runner:0.5'
androidTestCompile 'com.Android.support.test:rules:0.5'
androidTestCompile 'com.Android.support.test.espresso:espresso-core:2.2.2'
androidTestCompile 'com.Android.support.test.espresso:espresso-intents:2.2.2'

注意:espresso-intentsは、espresso-corerunner、またはrulesライブラリがないと実行できません。

ここで説明されているように、ActivityTestRule<>IntentsTestRuleに変更する必要がある場合もあります。

IntentsTestRule

Espresso-Intentsを使用する場合は、ActivityTestRuleではなくIntentsTestRuleを使用してください。 IntentsTestRuleを使用すると、機能UIテストでEspresso-Intents APIを簡単に使用できます。このクラスはActivityTestRuleの拡張であり、@ Testで注釈が付けられた各テストの前にEspresso-Intentsを初期化し、各テストの実行後にEspresso-Intentsを解放します。アクティビティはテストごとに終了し、このルールはActivityTestRuleと同じ方法で使用できます。

差出人: https://google.github.io/Android-testing-support-library/docs/espresso/intents/

同様の問題に対してespresso-intentsを使用した解決策を次に示します。

インテントスタブを使用したテストの例:

@Test
 public void testActivityResultIsHandledProperly() {
   // Build a result to return when a particular activity is launched.
   Intent resultData = new Intent();
   String phoneNumber = "123-345-6789";
   resultData.putExtra("phone", phoneNumber);
   ActivityResult result = new ActivityResult(Activity.RESULT_OK, resultData);

   // Set up result stubbing when an intent sent to "contacts" is seen.
   intending(toPackage("com.Android.contacts")).respondWith(result));

   // User action that results in "contacts" activity being launched.
   // Launching activity expects phoneNumber to be returned and displays it on the screen.
   user.clickOnView(system.getView(R.id.pickButton));

   // Assert that data we set up above is shown.
   assertTrue(user.waitForText(phoneNumber));
 }

差出人: https://developer.Android.com/reference/Android/support/test/espresso/intent/Intents.html

追加のリソース:

10
piotrek1543

開始されたアクティビティを実際にエスプレッソインテントと一致させるには、新しいインテントのコンポーネントを確認する必要があります。

_    intended(hasComponent(NewActivity.class.getName()));
_

エスプレッソでインテントを記録できるように、セットアップではIntents.init()を、ティアダウンではIntents.release()を必ず呼び出してください。

19
Be_Negative