2015-11-04 4 views
1

В моем приложении у меня есть кнопка, которая выдает диалог «Вызов xxxx-xxxx» Да/Нет. После нажатия «Да» вызывается номер.Телефонный звонок для Android Espresso 2

Это тестовый код:

@Test 
public void testPhoneButton() { 
    clickContactTab(); 

    ViewInteraction phoneButtonInteraction = Espresso.onView(ViewMatchers.withId(R.id.button_phone)); 
    phoneButtonInteraction.perform(ViewActions.scrollTo()); 
    phoneButtonInteraction.perform(ViewActions.click()); 
    Espresso.onView(ViewMatchers.withText(R.string.dialog_phone_title)).inRoot(RootMatchers.isDialog()).check(ViewAssertions.matches(ViewMatchers.isDisplayed())); 
    Espresso.onView(ViewMatchers.withId(android.R.id.button2)).perform(ViewActions.click()); 
    Intents.assertNoUnverifiedIntents(); 
    phoneButtonInteraction.perform(ViewActions.click()); 
    Espresso.onView(ViewMatchers.withId(android.R.id.button1)).perform(ViewActions.click()); 
    Intents.intended(Matchers.allOf(IntentMatchers.hasAction(Intent.ACTION_CALL), IntentMatchers.hasData(Uri.parse("tel:" + tel)))); 
} 

Все отлично работает, но как я могу отменить телефонный звонок после теста?

yogurtearls answer работает для меня, спасибо:

@Test 
public void testPhoneButton() { 
    clickContactTab(); 

    ViewInteraction phoneButtonInteraction = Espresso.onView(ViewMatchers.withId(R.id.button_phone)); 
    phoneButtonInteraction.perform(ViewActions.scrollTo()); 
    phoneButtonInteraction.perform(ViewActions.click()); 
    Espresso.onView(ViewMatchers.withText(R.string.dialog_phone_title)).inRoot(RootMatchers.isDialog()).check(ViewAssertions.matches(ViewMatchers.isDisplayed())); 
    Espresso.onView(ViewMatchers.withId(android.R.id.button2)).perform(ViewActions.click()); 
    Intents.assertNoUnverifiedIntents(); 

    phoneButtonInteraction.perform(ViewActions.click()); 
    Intent stubIntent = new Intent(); 
    Instrumentation.ActivityResult stubResult = new Instrumentation.ActivityResult(Activity.RESULT_OK, stubIntent); 
    Intents.intending(IntentMatchers.hasAction(Intent.ACTION_CALL)).respondWith(stubResult); 
    Espresso.onView(ViewMatchers.withId(android.R.id.button1)).perform(ViewActions.click()); 
    Intents.intended(Matchers.allOf(IntentMatchers.hasAction(Intent.ACTION_CALL), IntentMatchers.hasData(Uri.parse("tel:" + tel)))); 
} 

ответ

2

Вы должны использовать Intent stubbing. Вы можете избежать фактического подъема дозвона и вместо этого проверить, что было отправлено правильное намерение.

Прежде чем нажать кнопку «Да», вызовите команду intendING.

Смежные вопросы