Эспрессо-проверьте, какое действие открывается с помощью намерения нажать кнопку?
Это можно проследить, какое действие открывается после нажатия определенной кнопки?
у меня есть тест, в котором, когда кнопка нажата / нажата, это отправляет запрос на сервер. До момента отправки запроса,Он открывает Activity. для проверки успешного выполнения теста, мне нужно проверить, что это открытое мероприятие.
пример моего теста:
проверьте, какое намерение открывается в эспрессо - - -
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);
}
2 ответов
можно ли отследить, какое действие открылось после нажать кнопку?
Регистрация 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-core
,runner
илиrules
libs.
Вам также может понадобиться изменить ActivityTestRule<>
to IntentsTestRule
как описано здесь:
Пример кода (нажмите на кнопку, чтобы запустить новое действие)IntentsTestRule
используйте IntentsTestRule вместо ActivityTestRule при использовании Эспрессо-Намерения. IntentsTestRule делает его простым в использовании Espresso-Intents API в функциональных тестах пользовательского интерфейса. Этот класс является расширение ActivityTestRule, инициализирующее Эспрессо-намерения перед каждым тестом аннотируется @Test и выпускает Эспрессо-намерения после каждого тестового прогона. Действие будет прекращено после каждого теста и это правило можно использовать так же, как ActivityTestRule.
от: https://google.github.io/android-testing-support-library/docs/espresso/intents/
вот решение с использованием espresso-intents
для подобной проблемой:
пример теста с намерением stubbing:
@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
дополнительные материалы:
чтобы фактически сопоставить начатое действие с намерениями эспрессо, вам нужно проверить компонент нового намерения:
intended(hasComponent(NewActivity.class.getName()));
обязательно позвоните Intents.init()
в настройки и Intents.release()
в teardown, чтобы иметь возможность записывать намерения с эспрессо.