L'attribut dependsOnMethods
de l'annotation @Test
fonctionne correctement lorsque le test dont il dépend est dans la même classe que celle du test comportant cette annotation. Mais cela ne fonctionne pas si la méthode à tester et la méthode dépendante appartiennent à des classes différentes. Exemple est comme suit:
class c1 {
@Test
public void verifyConfig() {
//verify some test config parameters
}
}
class c2 {
@Test(dependsOnMethods={"c1.verifyConfig"})
public void dotest() {
//Actual test
}
}
Y a-t-il un moyen de contourner cette limitation? Un moyen facile de sortir consiste à créer un test dans class c2
qui appelle c1.verifyConfig()
. Mais ce serait trop de répétition.
Placez la méthode dans group
et utilisez dependsOnGroups
.
class c1 {
@Test(groups={"c1.verifyConfig"})
public void verifyConfig() {
//verify some test config parameters
}
}
class c2 {
@Test(dependsOnGroups={"c1.verifyConfig"})
public void dotest() {
//Actual test
}
}
Il est recommandé de vérifier la configuration dans un @Before
* et de lancer le en cas de problème afin que les tests ne s'exécutent pas. De cette façon, les tests peuvent se concentrer uniquement sur les tests.
class c2 {
@BeforeClass
public static void verifyConfig() {
//verify some test config parameters
//Usually just throw exceptions
//Assert statements will work
}
@Test
public void dotest() {
//Actual test
}
}
@Test (groupes = {"prérequis"})
public void M1()
{
}
@Test(dependsOnGroups={"prerequisites"})
public void M2()
{
}
<groups>
<run>
<include name ="prerequisites"/>
</run>
</groups>
Vous pouvez utiliser groups
et dependsOnGroups
dans l'annotation TestNG @Test
, comme décrit dans les réponses précédentes.
Cependant, les deux classes doivent être sous le même <test>
.
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite" verbose="1" >
<test name="Test" >
<classes>
<class name="c1" />
<class name="c2" />
</classes>
</test>
</suite>
Ce qui suit entraînera une exception lors de l'exécution de la suite de tests.
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1" verbose="1" >
<test name="Test1" >
<classes>
<class name="c1" />
</classes>
</test>
<test name="Test2">
<classes>
<class name="c2" />
</classes>
</test>
</suite>