0

Je tente d'instrumentation tester une activité de manière isolée mais je rencontre des problèmes car une partie du test nécessite que je vérifie que l'activité en cours de test lance une autre activité via une intention. Ce que je cherche est un moyen d'intercepter une intention afin que je puisse vérifier que l'activité isolée a réellement tenté de lancer l'activité suivante mais sans lancer l'activité suivante.Instrumentation testant une activité Android avec des intentions isolées

Le problème que je rencontre est que lorsque l'activité suivante se lance, elle se bloque parce que je suis incapable de se moquer de quelques choses critiques dont elle a besoin. Ce serait parfait s'il y avait un moyen d'intercepter l'intention pendant les tests afin que l'activité suivante ne se lance jamais.

Est ce que je cherche même possible?

Répondre

0

Au départ, j'essayé d'utiliser des méthodes de Espresso prévu() et l'intention() afin de vérifier que Intentions étaient envoyés sans réellement démarrer une activité (comme décrit ici: https://collectiveidea.com/blog/archives/2015/08/11/stub-your-android-intents

Cependant, je n'a pas eu la chance faire que .. Ce que je travail à la suite eu recours à l'aide a été ActivityMonitor pour faire le travail

Voici un exemple:

private void registerActivityMonitorAndStartActivity(String name) { 
    Instrumentation.ActivityMonitor am = new 
    Instrumentation.ActivityMonitor(name, null, true); 
    InstrumentationRegistry.getInstrumentation().addMonitor(am); 

    mActivityTestRule.launchActivity(new Intent()); 

    int count = 0; 

while(!InstrumentationRegistry.getInstrumentation().checkMonitorHit(am, 1) && count < 50000) { 
    count++; 
} 
    Timber.d("Count = " + String.valueOf(count)); 
assertTrue(InstrumentationRegistry.getInstrumentation().checkMonitorHit(am, 1)); 
} 

Cela a essentiellement une montre de moniteur d'activité pour une intention envoyée à un activi ty que vous spécifiez par nom. Une boucle while court jusqu'à ce que le moniteur d'activité voit un hit, puis se casse ou se casse si un timeout est atteint.