web-dev-qa-db-fra.com

Comment puis-je obtenir le nom de la méthode de test qui a été exécutée dans une méthode de démontage de test?

En gros, j'ai une méthode de démontage que je veux enregistrer dans la console sur laquelle le test vient d'être exécuté. Comment pourrais-je m'y prendre pour obtenir cette chaîne?

Je peux obtenir le nom de la classe, mais je veux la méthode qui vient d’être exécutée.

public class TestSomething {

    @AfterMethod
    public void tearDown() {
        System.out.println("The test that just ran was: " + getTestThatJustRanMethodName());
    }

    @Test
    public void testCase() {
       assertTrue(1 == 1);
    }
}

... devrait afficher à l'écran: "Le test qui vient d'être exécuté était: testCase"

Cependant, je ne connais pas la magie que devrait être getTestThatJustRanMethodName.

25
Zee Spencer

Déclarez un paramètre de type ITestResult dans votre @AfterMethod et TestNG l'injectera:

@AfterMethod
public void afterMethod(ITestResult result) {
  System.out.println("method name:" + result.getMethod().getMethodName());
}
39
Cedric Beust

Si vous voulez obtenir le nom de la méthode avant le test est exécuté, vous pouvez utiliser les éléments suivants:

import Java.lang.reflect.Method;

@BeforeMethod
public void nameBefore(Method method)
{
    System.out.println("Test name: " + method.getName());       
}
21
JacekM

Il suffit de déclarer un paramètre Java.lang.reflect.Method.

 @BeforeMethod
 public void beforeTestMethod(Method testMethod){
    System.out.println("Before Testmethod: " + testMethod.getName());       
 }

Mais TestNG vous permet deinjecterbeaucoup plus;)

  • Toute méthode @Before ou @Test peut déclarer un paramètre de typeITestContext.
  • Toute méthode @AfterMethod peut déclarer un paramètre de typeITestResult, qui reflètera le résultat de la méthode de test qui vient d'être exécutée.
  • Toutes les méthodes @Before et @After peuvent déclarer un paramètre de typeXmlTest, qui contient la balise actuelle.
  • Tous @BeforeMethod (et @AfterMethod ) peuvent déclarer un paramètre de typeJava.lang.reflect.Method. Ce paramètre recevra la méthode de test qui sera appelée une fois cette @BeforeMethod terminée (ou après la méthode exécutée pour @AfterMethod).
  • N'importe quel @BeforeMethod peut déclarer un paramètre de typeObject[]. Ce paramètre recevra la liste des paramètres sur le point d'être introduits dans la prochaine méthode de test, qui pourraient être injectés par TestNG, tels queJava.lang.reflect.Methodou provenir d'un@DataProvider.
  • N'importe quel @DataProvider peut déclarer un paramètre de typeITestContextouJava.lang.reflect.Method. Ce dernier paramètre recevra la méthode de test sur le point d'être appelée.
2
René Link

Une autre manière (bien que pas aussi simple que réponse de Cedric _) prise en charge par TestNG consiste à enregistrer un écouteur :

@Listeners({MethodListener.class})
public class ListenerTest {

  @Test
  public void someTest() {
  }

}

Où l'auditeur pourrait ressembler à ceci:

public class MethodListener implements IInvokedMethodListener {

  @Override
  public void beforeInvocation(IInvokedMethod method, ITestResult testResult) {

  }

  @Override
  public void afterInvocation(IInvokedMethod method, ITestResult testResult) {
    System.out.println(method.getTestMethod().getMethodName());
  }
}

Cet écouteur particulier imprime le nom de la méthode (c'est-à-dire someTest) sur la console. Il serait exécuté après every test exécuté.

Si vous générez le testSuite par programme, vous pouvez ajouter l'écouteur comme suit au lieu d'ajouter @Listeners({MethodListener.class}) sur chaque classe de test.

    List<String> listeners = new ArrayList<String>();
    listeners.add(MethodListener.class.getName());
    testSuite.setListeners(listeners);
1
Magnilex

Dans mon propre projet, j'accède à ces données à l'aide d'un JUnit @Rule.

@Rule
public TestWatcher watcher = new TestWatcher() {
    public void starting(Description description) {
        testName = description.getMethodName();
        className = description.getClassName();
        logger.info("Starting test " + testName + " in class " + className);
    }
};
0
Y-B Cause