2017-02-02 1 views

Répondre

1

Vous devez simuler le processus de cliquer sur un bouton, puis tester si l'activité en haut de la pile est celui que vous cherchez

@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]; 
    } 

} 

Sur la fonction testButton, il y a deux lignes, la première à cliquer sur votre bouton, la seconde est de vérifier l'activité résultante

Espresso fonctionne sur le fil principal donc votre amende

2

l'intérieur de vos tests que vous avez probablement ceci:

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

Ensuite, vous pouvez appeler:

testRule.getActivity() 

pour obtenir instance de Activity.

juste appeler

testRule.getActivity() instanceof MyActivity