2017-06-05 2 views
0

J'essaie d'écrire des tests d'interface utilisateur automatisés en utilisant Espresso et Concombre. Jusqu'à présent, j'ai réussi à exécuter des définitions d'étape pour une fonctionnalité qui teste une seule activité en utilisant ActivityTestRule. J'utilise l'annotation @Before de Cucumber pour préparer le scénario, par exemple lancer l'activité requise. Le problème est que lorsque j'essaie d'exécuter une suite de tests contenant plus d'une définition de fonctionnalité, tous les blocs @Before seront appelés avant chaque scénario. Par exemple, lorsque le cœur d'instrumentation commence à exécuter le scénario 1, il exécute les méthodes @Before à la fois dans le scénario 1 et le scénario 2, ce qui entraîne des chevauchements d'activités et des tests défaillants.Les crochets de concombre contrôlent le débit?

public class Activity1Stepdefs { 

    @Before 
    public void setUp() { 
     // Called before both scenario 1 and scenario 2, needs to be called only before scenario 1. 
    } 

    @Given("^scenario 1$") 
    public void scenario_1() throws Throwable { 
     // Scenario 1 
    } 
} 

public class Activity2Stepdefs { 

    @Before 
    public void setUp() { 
     // Called before both scenario 1 and scenario 2, needs to be called only before scenario 2. 
    } 

    @Given("^scenario 2$") 
    public void scenario_2() throws Throwable { 
     // Scenario 2 
    } 
} 

flux de contrôle résultant:

  1. Activity1Stepdefs.setUp()
  2. Activity2Stepdefs.setUp()
  3. Activity1Stepdefs.scenario_1()
  4. Activity2Stepdefs.setUp()
  5. Activity1Stepdefs.setUp()
  6. Activity2Stepdefs.scenario_2

flux de contrôle désiré:

  1. Activity1Stepdefs.setUp()
  2. Activity1Stepdefs.scenario_1()
  3. Activity2Stepdefs.setUp()
  4. Activity2Stepdefs.scenario_2
+0

Ceci est un comportement normal des crochets avant. Si vous voulez utiliser différents avant les crochets. Puis convertissez avant le scénario en définition d'étape et ajoutez-le dans le scénario en tant que ligne d'histoire dans le fichier de caractéristiques. Ne pas utiliser avant scénario si vous voulez un comportement différent. – Murthi

+0

Mais je continue à voir des exemples de personnes qui lancent des activités dans les hooks '@ Before' comme ici: https://stackoverflow.com/a/36012553/5963217 Donc, je suppose que ma question est: Quel serait le bon endroit pour préparer l'interface utilisateur pour le test alors? Je ne voudrais vraiment pas que mes fonctionnalités soient polluées avec la logique d'installation. – Julsteri

Répondre

1

Ceci peut être réalisé par des crochets marqués. Attribuez d'abord des balises pour les scénarios 1 et 2 dans le fichier de caractéristiques, puis créez des hameçons étiquetés comme indiqué ci-dessous. Supposons que j'ai donné le nom de tag pour les scénarios 1 et 2 en tant que scen1 et scen2 respectivement. before ("@scen1") public void scenarioOneSetup() { // code for scenario 1 setup } before ("@scen2") public void scenarioTwoSetup() {// code for scenario 2 setup}