2017-08-16 6 views
0

J'ai une suite de tests avec une méthode setUp annotée avec @BeforeSuite qui s'exécute avant la suite. De temps en temps, je devrai effectuer des tests individuellement ou tous les tests d'une classe. Existe-t-il un moyen d'exécuter ma méthode setUp avant eux aussi? Je crois comprendre que TestNG crée une suite par défaut, donc peu importe comment j'exécute les tests, si j'ai une méthode annotée avec @BeforeSuite, elle devrait être exécutée avant tous les tests. Cependant cela ne fonctionne pas pour moi. Il ne fonctionne que lorsque je cours la suite complète.TestNG: Faut-il exécuter des tests par des tests par méthode ou par classe pour appeler la méthode @BeforeSuite?

suite xml. Si je cours un test d'ici ça fonctionne. (Clic droit, sélectionnez Exécuter)

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > 
<suite name="OvernightSuite"> 
<test name="Test Sequential" preserve-order="true" parallel="none"> 
    <classes> 
     <class name="com.myComp.test.cases.setUpClass" /> 
     <class name="com.com.myComp.test.cases.testClass1" /> 
     <class name="com.com.myComp.test.cases.testClass2" /> 
    </classes> 
</test> 
</suite> 

classe Set-up

public class setUpClass{ 
@BeforeSuite 
public void setUp() { 
    populateDataSources(); 
    populateVariables(); 
} 
    @Test 
    public void datasourcesWereSetUpTest() { 
     boolean result = method.read(); 
     assert(result); 
    } 
} 

Une des classes de test. Si je cours ici, (mettre en surbrillance, clic-droit, sélectionner lancer) l'beforeSuite n'est pas exécuté.

public class testClass1{ 
    @Test 
    public void someTest() { 
     boolean result = method.read(); 
     assert(result); 
    } 
} 

Répondre

0

Tant que la méthode annotée @BeforeSuite fait partie de la classe de test (celui qui a un ou plusieurs @Test méthodes), il devrait fonctionner sans que vous ayez à faire quoi que ce soit de plus.

Mais si votre méthode @BeforeSuite est dans une autre classe, la seule façon de vous l'avoir exécuté est si vous faites une des opérations suivantes:

  • Créer un fichier xml suite, qui comprend la classe qui contient la méthode @BeforeSuite, avec votre classe de test. (Ou)
  • Créer un écouteur testng qui implémente l'interface org.testng.ISuiteListener et déplacer la logique de @BeforeSuite en onStart(), puis fil dans cet écouteur via l'annotation @Listeners (ou) balise <listeners> (ou) par l'approche service Loader. Pour plus d'informations, vous pouvez lire this blog de la mienne.
+0

En utilisant la méthode suggérée ci-dessus en ajoutant une suite xml qui comprend la classe d'installation fonctionne si je cours en sélectionnant une classe de test à partir de la suite xml, mais pas si je cours à partir de la méthode actuelle de la classe elle-même . Des suggestions sur pourquoi? Cela devrait-il fonctionner? Est-ce peut-être à faire avec mon installation IDE? – ciffieM

+0

Je n'ai pas bien compris votre question. Pouvez-vous s'il vous plaît partager une capture d'écran de la façon dont vous exécutez votre test depuis l'EDI et aussi afficher le code qui contient votre classe de test et votre méthode annotée '@ BeforeSuite'? –

+0

J'ai ajouté les informations supplémentaires à la question – ciffieM

0

Avez-vous essayé les options suivantes:

'@BeforeTest' 

Pour exécuter une méthode de mise en place avant l'une des méthodes de test inclus dans le test <> dans le fichier testng.xml.

'@BeforeMethod' 

Pour exécuter une méthode de configuration avant l'une des méthodes de test annotées comme @Test.

http://howtesting.blogspot.ie/2012/12/difference-between-beforetest-and.html

+0

Oui, @BeforeTest devrait fonctionner ici aussi, il a le même résultat. Il s'exécute à partir d'une classe de test appelée à partir du fichier .xml mais pas avant un test appelé dans la classe java – ciffieM