2017-02-02 4 views

ответ

1

Вы должны имитировать процесс нажатия на кнопку, а затем проверить, если активность на вершине стека, который вы ищете

@RunWith(AndroidJUnit4.class) 
public class YourTestClass{ 


    @Test 
    public void testButton() { 
     Espresso.onView(ViewMatchers.withId(R.id.yourButtonId)).perform(ViewActions.click()); 

     Assert.assertEquals(getActivityInstance().getClass(), YourActivityThatShouldStart.class); 
    } 

    private Activity getActivityInstance() { 
     final Activity[] currentActivity = {null}; 
     InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() { 
      public void run() { 
       Collection resumedActivities = ActivityLifecycleMonitorRegistry.getInstance().getActivitiesInStage(Stage.RESUMED); 
       if (resumedActivities.iterator().hasNext()) { 
        currentActivity[0] = (Activity) resumedActivities.iterator().next(); 
       } 
      } 
     }); 

     return currentActivity[0]; 
    } 

} 

На функции testButton есть две линии: первая нажимается на вашу кнопку, вторая - проверять итоговую активность

Эспрессо работает на основной нити, поэтому ваш штраф

2

Внутри ваших тестов вы, вероятно, это:

@Rule 
public ActivityTestRule<MyActivity> testRule = new ActivityTestRule<>(MyActivity.class); 

Тогда вы можете позвонить:

testRule.getActivity() 

получить экземпляр Activity.

праведника называют

testRule.getActivity() instanceof MyActivity 
Смежные вопросы