web-dev-qa-db-fra.com

TestNG dependOnMethods de différentes classes

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.

25
brayne

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
  }
}
30
Cedric Beust

DependsOnMethods ne peut pas être utilisé à partir d'une classe différente. Pour résoudre ce problème, nous pouvons utiliser dependOnGroups;

Le code change-t-il?

1. classe includesOnGroups;

@Test (groupes = {"prérequis"})

public void M1()
{

}

2. classe qui appelle dependOnGroups;

@Test(dependsOnGroups={"prerequisites"})
public void M2()

{

}

3. xml

<groups>
    <run>
        <include name ="prerequisites"/>
    </run>
</groups>
1
RANA DINESH

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>
0
Samer Makary