[JAVA] Visualisez la méthode de test en cours d'exécution dans TestNG dans l'écouteur

TestNG Il y a un certain "Où est-ce?"

Lorsque j'exécute un test TestNG normalement sur la console, cela ne me donne aucune information sur la méthode de test en cours d'exécution. Si tous les tests se déroulent correctement, c'est bien, mais

% mvn clean test
[INFO] Scanning for projects...
(Omission)
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running TestSuite

↑ Parfois, je suis bloqué avec cet affichage, et je suis perdu car je ne sais pas quel test est suspendu.

Donc, pour éviter de tels problèmes, je vais vous montrer comment sortir sur la console quel test est exécuté par TestNG. L'image de la sortie du journal après l'action est comme ceci:

[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running TestSuite
[CustomTestListener] [INFO] Running: com.example.calc.test.CalcTest#testAdd(0, 0, 0)
[CustomTestListener] [INFO] Running: com.example.calc.test.CalcTest#testAdd(0, 1, 1)

Dans cet article, je présenterai les trois méthodes suivantes.

Exemple de code

L'exemple de code utilisé dans cet article se trouve sur GitHub.

Méthode 1: Mettez le journal directement dans la méthode de test

C'est une méthode simple et facile pour mettre le journal directement dans la méthode de test elle-même. C'est bien si vous avez un nombre limité de méthodes que vous souhaitez enregistrer, mais si vous en avez beaucoup, c'est un gros problème ...

public class CalcTest {
    @Test(dataProvider = "testAdd")
    public void testAdd(int x, int y, int expected) {
        //Sortie des informations sur la méthode de test pour enregistrer
        LOGGER.info(String.format(
        "Running: com.example.calc.test.CalcTest#testAdd(%d, %d, %d)", x, y, expected));

        Calc calc = new Calc();
        assertEquals(calc.add(x, y), expected);
    }
    // ...
}
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running TestSuite
[CalcTest] [INFO] Running: com.example.calc.test.CalcTest#testAdd(0, 0, 0)
[CalcTest] [INFO] Running: com.example.calc.test.CalcTest#testAdd(0, 1, 1)

Méthode 2: Mettez le journal dans la méthode @ BeforeMethod de la classe de test

Définissez une méthode avec l'annotation @ BeforeMethod dans la classe de test et placez-y le journal. C'est une méthode raisonnable qui est facile à démarrer et à comprendre car il suffit de jouer un peu avec la classe de test.

import org.testng.annotations.BeforeMethod;

public class CalcTest {
    @BeforeMethod
    public void beforeMethod(Method method, Object[] data) {
        //Sortie des informations sur la méthode de test pour enregistrer
        LOGGER.info(String.format(
            "Running: %s#%s(%s)",
            method.getDeclaringClass().getCanonicalName(),
            method.getName(),
            Arrays.stream(data).map(x -> x.toString()).collect(Collectors.joining(", "))));
    }
    // ...
}
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running TestSuite
[CalcTest] [INFO] Running: com.example.calc.test.CalcTest#testAdd(0, 0, 0)
[CalcTest] [INFO] Running: com.example.calc.test.CalcTest#testAdd(0, 1, 1)

Méthode 3: Ajouter un écouteur et remplir la méthode ʻonTestStart` avec des journaux

La méthode consiste à ajouter un écouteur TestNG et à utiliser la méthode ʻonTestStart` de l'écouteur pour préparer le journal. Bien que la définition de l'écouteur prenne du temps, elle est efficace lorsqu'il existe de nombreuses méthodes de test cible, car le paramètre fonctionne globalement. Il est également utile si vous ne pouvez pas modifier l'ensemble de test (comme exécuter un TCK) car vous n'avez pas à vous soucier de la classe de test.

L'écouteur TestNG est préparé comme la classe suivante qui implémente l'interface ʻITestListener`.

import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestResult;

public class CustomTestListener implements ITestListener {
    private static final Logger LOGGER = Logger.getLogger(CustomTestListener.class);

    public void onTestStart(ITestResult result) {
        //Sortie des informations sur la méthode de test pour enregistrer
        LOGGER.info(String.format(
            "Running: %s#%s(%s)",
            result.getMethod().getTestClass().getName(),
            result.getMethod().getMethodName(),
            Arrays.stream(result.getParameters()).map(x -> x.toString()).collect(Collectors.joining(", "))));
    }

    public void onTestSuccess(ITestResult result) { }
    public void onTestFailure(ITestResult result) { }
    public void onTestSkipped(ITestResult result) { }
    public void onTestFailedButWithinSuccessPercentage(ITestResult result) { }
    public void onStart(ITestContext context) { }
    public void onFinish(ITestContext context) { }
}

De plus, éditez testng.xml ou spécifiez l'annotation @ Listeners dans la classe de test pour enregistrer l'auditeur avec TestNG. Pour enregistrer un écouteur avec testng.xml, écrivez comme suit.

<suite>
    <listeners>
        <listener class-name="com.example.calc.test.util.CustomTestListener"/>
    </listeners>
   <!-- ... -->
</suite>

Pour spécifier l'annotation @ Listeners dans la classe de test, écrivez comme suit.

import org.testng.annotations.Listeners;

@Listeners({ CustomTestListener.class })
public class CalcTest {
    // ...
}

La sortie de journal attendue ressemble à ceci.

[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running TestSuite
[CustomTestListener] [INFO] Running: com.example.calc.test.CalcTest#testAdd(0, 0, 0)
[CustomTestListener] [INFO] Running: com.example.calc.test.CalcTest#testAdd(0, 1, 1)

Résumé

J'ai présenté comment visualiser le test en cours d'exécution par TestNG. Il existe de nombreuses façons de le faire, comme présenté dans cet article, alors essayez-le au cas par cas!

Les références

Recommended Posts

Visualisez la méthode de test en cours d'exécution dans TestNG dans l'écouteur
Tester les méthodes privées dans JUnit
Tester les méthodes privées dans JUnit
[Java] Tester des méthodes privées avec JUnit
Contrôler l'ordre de test dans Junit4 avec un type d'énumération
Testez le contrôleur avec Mock MVC dans Spring Boot
Mélanger les cas de test avec JUnit 5 et les méthodes par défaut
Configuration avec les données de test initiales insérées dans le conteneur Db2 / DB
Exécutez Maven sur Java 8 lors de la compilation sur Java 6 et des tests sur Java 11