0

J'ai écrit quelques tests instrumentés, et les assertions passent - quelle que soit la configuration dans laquelle ils sont exécutés, l'exécution ne se termine jamais/finit - je dois terminer manuellement la course - qui est pas optimal pour une configuration CI.Test instrumenté Android en cours d'exécution

J'ai essayé de courir le code ci-dessous dans les configurations d'exécution suivantes:

  • tous les tests dans la classe de test - dans ce cas, la course ne progresse pas sur le second test après l'exécution de la première
  • Exécuter tous les tests dans le package de test - dans ce cas, l'exécution ne progresse pas sur le deuxième test après l'exécution du premier, mais tous les autres tests instrumentés dans d'autres classes réussissent.
  • Exécuter les deux tests dans la classe d'essai séparément

Même si je prends mon code de test et mis dans des tests très simples (comme je l'ai fait ci-dessous) l'exécution de code ne se termine pas.

public class TestClass { 

    private MainActivity mainActivity; 
    private MyScreen myScreenInstance; 

    @Rule 
    public ActivityTestRule mActivityRule = new ActivityTestRule<>(MainActivity.class); 

    @Before 
    public void setUp() throws FileNotFoundException { 
     mainActivity = (MainActivity) mActivityRule.getActivity(); 
    } 

    @Test 
    public void test_1() throws FileNotFoundException { 
     assertEquals(1,2); 
    } 

    @Test 
    public void test_2() throws FileNotFoundException { 
     assertEquals(2,2); 
    } 


} 

Pour le contexte, je suis en train de tester qu'un comportement touche dans une classe que je l'ai écrit sur le dessus d'un simple moteur de jeu écrit par un professeur, le code de test et affirmations que j'ai écrit tout le travail - mais le le problème est que la course ne se termine pas.

Dois-je avoir une sorte de méthode de «démontage» pour détruire le ActivityTestRule? Que puis-je faire pour m'assurer que cette exécution se termine correctement? Il est intéressant de noter que ces assertions très simples fonctionnent avec succès sur l'API 25 sur un émulateur Nexus 7, mais lorsqu'elles sont exécutées dans un émulateur Nexus 5 exécutant l'API 23, les tests ne se terminent pas comme décrit ci-dessus.

Informations complémentaires:

  • l'exécution des tests lentement avec le débogueur, pas à pas à travers les étapes - ils passent tous comme ils devraient
  • ajouter un Thread.sleep (1000) à la @After (tearDown) méthode, le problème décrit cesse d'apparaître. Toutefois, cela ne résout pas ce problème car il notre course encore fois sur dans le laboratoire de test firebase (CI)

Ci-dessous une photo d'une course que j'ai commencé, puis 5 minutes plus tard, il est accroché. Il aurait dû effectuer 2 tests en < 2 secondes.

enter image description here

+0

J'ai posté de nouvelles informations sur ce poste, je suis toujours activement à la recherche pour résoudre ce problème –

Répondre

0

J'ai maintenant résolu ce problème, habituellement un développeur ajouterait un appel cependant onView, en raison de la nature du cadre dans lequel je travaille je ne le fais. J'ai ajouté

onView(withId(R.id.activity_fragment_id)).perform(click()); 

à la configuration, cliquer simplement la zone principale que le jeu fonctionne à l'intérieur et teste maintenant passer.