[JAVA] Contrôler l'ordre de test dans Junit4 avec un type d'énumération

Aperçu

JUnit ne garantit pas l'ordre d'exécution des méthodes définies par l'annotation @ Test.

Par conséquent, créez les trois classes suivantes pour contrôler l'ordre d'exécution.

En tant que flux de processus, ʻOrderedRunner a été ajouté à chaque méthode de test lorsque le test a été exécuté. Le flux consiste à contrôler l'ordre d'exécution en lisant la valeur de réglage de ʻOrder.

TestMethod.java



public enum TestMethod {
    strArrayIsNullTest,
    strIsNullTest
};

Order.java



import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface Order {
    TestMethod order();
}

OrderedRunner.java


import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import org.junit.runners.BlockJUnit4ClassRunner;
import org.junit.runners.model.FrameworkMethod;
import org.junit.runners.model.InitializationError;

public class OrderedRunner extends BlockJUnit4ClassRunner {
    public OrderedRunner(Class<?> klass) throws InitializationError  {
        super(klass);
    }

    @Override
    protected List<FrameworkMethod> computeTestMethods() {
        List<FrameworkMethod> list = super.computeTestMethods();
        Collections.sort(list, new Comparator<FrameworkMethod>() {
            @Override
            public int compare(FrameworkMethod f1, FrameworkMethod f2) {
                Order o1 = f1.getAnnotation(Order.class);
                Order o2 = f2.getAnnotation(Order.class);

                if (o1 == null || o2 == null){
                    return -1;
                }
                return o1.order().ordinal() - o2.order().ordinal();
            }
        });
        return list;
    }
}

Entraine toi

Foo.java


public class Foo {
    public static boolean isNull(String[] arg) {
        return arg == null;
    }

    public static boolean isNull(String str) {
        return str == null || str.length() == 0 || str.equals("");
    }
}

FooTest.java


import static org.junit.Assert.*;

import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(OrderedRunner.class)
public class FooTest {

    @Test
    @Order(order=TestMethod.strArrayIsNullTest)
    public void strArrayIsNullTest() {
        String[] arg = {"test"};
        assertFalse(Foo.isNull(arg));
        System.out.println("strArrayIsNullTest OK");
    }

    //Même si vous ajoutez un test, l'ordre est garanti en ajoutant un élément à TestMethod.
    /**
     * @Test
     * @Order(order=TestMethod.reservationsTest)
     * public void reservationsTest();
     */

    @Test
    @Order(order=TestMethod.strIsNullTest)
    public void strIsNullTest() {
        String str = "test";
        assertFalse(Foo.isNull(str));
        System.out.println("strIsNullTest OK");
    }
}

Matériel de référence

Recommended Posts

Contrôler l'ordre de test dans Junit4 avec un type d'énumération
Faites un test unitaire avec Junit.
Tester l'API Web avec junit
Tester les méthodes privées dans JUnit
Tester les méthodes privées dans JUnit
Sortie du rapport de test JUnit dans Maven
[Java] Tester des méthodes privées avec JUnit
Contrôleur de cadre de test Spring avec Junit
Ordre du prétraitement et du post-traitement du test unitaire JUnit
Comment filtrer JUnit Test dans Gradle
Introduction au test de paramétrage dans JUnit
Comment tester l'étendue privée avec JUnit
Le test JUnit 5 Gradle génère une erreur avec l'annotation Lombok
Présentation du test Java automatisé avec JUnit 5 + Gradle
Comment tester une méthode privée qui prend un tableau ou un argument de longueur variable dans JUnit
[Java] Comment tester s'il est nul dans JUnit
[CircleCI 2.0] [Java] [Maven] [JUnit] Agréger les résultats des tests JUnit avec CircleCI 2.0
Testez le contrôleur avec Mock MVC dans Spring Boot
Comment tester les interruptions pendant Thread.sleep avec JUnit
Test JUnit facile de la version Elasticsearch 2018 avec Embedded-elasticsearch
JUnit 5: Comment écrire des cas de test dans enum
Tester le code à l'aide d'une maquette avec JUnit (centre EasyMock)
Refactoring dans JUnit
Visualisez la méthode de test en cours d'exécution dans TestNG dans l'écouteur
Mélanger les cas de test avec JUnit 5 et les méthodes par défaut
Comment trier par ordre croissant / décroissant avec SQLite
Configuration avec les données de test initiales insérées dans le conteneur Db2 / DB
Obtenez le nom du scénario de test dans la classe de test JUnit
Tester le contenu d'un fichier Excel avec JUnit
Implémenter le test double dans JUnit sans utiliser de bibliothèques externes
[Compatible JUnit 5] Ecrire un test en utilisant JUnit 5 avec Spring boot 2.2, 2.3
[JUnit 5] Ecrivez un test de validation avec Spring Boot! [Test de paramétrage]
Test unitaire de l'API Web et test d'intégration avec SpringBoot + Junit5, 4 modèles
J'ai écrit un test avec Spring Boot + JUnit 5 maintenant
Test d'intégration avec Gradle
[Rails] Test avec RSpec
Testez Nokogiri avec Rspec.
Tester automatiquement avec la jauge
Test de charge avec JMeter
Test de la logique d'envoi et de réception de demande avec MockWebServer dans JUnit
[Java] Je souhaite tester l'entrée standard et la sortie standard avec JUnit