[JAVA] Mélanger les cas de test avec JUnit 5 et les méthodes par défaut

Lors de la mise en œuvre des tests E2E à l'aide de JUnit dans le lanceur de tests, j'ai divisé la classe de test pour chaque écran et API. À ce stade, j'ai examiné comment définir une méthode de test commune à plusieurs classes de test.

(1) Utiliser la relation d'héritage

En définissant une méthode de test commune dans la classe parente de la classe de test, la méthode de test de la classe parente est également exécutée lorsque chaque classe de test est exécutée.

Le comportement propre à chaque classe de test est défini comme une interface (ou une méthode abstraite de la classe parente), et la méthode de test commune utilise cette interface pour implémenter le test.

public abstract class CommonTestA {
	//Une méthode abstraite pour définir un comportement spécifique à une classe de test
    abstract SomeObject doSomething();
    
    @Test
    public void commonTestX() {
        // doSomething()Pour implémenter un cas de test commun à l'aide
    }
}
//CommonTest lors de l'exécution de cette classe de test.commonTestX()Est également exécuté
public class TestClass extends CommonTestA {
    //Implémenter des cas de test spécifiques à la classe de test
}

Avec cette méthode, une classe de test ne peut hériter qu'une seule classe de test commune en raison des restrictions d'héritage Java, ce qui pose un problème lorsque vous souhaitez créer plusieurs classes de test communes.

(2) Utilisez la méthode par défaut

Le problème (1) peut être évité en utilisant la méthode par défaut de l'interface introduite dans Java 8. (Étant donné que plusieurs interfaces peuvent être implémentées dans une classe.) Cependant, dans JUnit 4 et versions antérieures, la méthode par défaut n'est pas exécutée dans la classe d'implémentation, donc JUnit 5 doit être utilisé.

public interface CommonTestA {
    SomeObject doSomething();

    @Test
    default void commonTestA() {
        //Définir une méthode de test commune comme méthode par défaut
    }
}
//Plusieurs interfaces de test communes peuvent être implémentées dans une classe de test
public class TestClassX implements CommonTestA, ComonTestB {
	// ...
}

Recommended Posts

Mélanger les cas de test avec JUnit 5 et les méthodes par défaut
[Java] Tester des méthodes privées avec JUnit
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
Etudier Java 8 (méthode StaticIF et Default)
Copier et coller le test avec RSpec
Contrôleur de cadre de test Spring avec Junit
Contrôler l'ordre de test dans Junit4 avec un type d'énumération
Comment tester une méthode privée qui prend un tableau ou un argument de longueur variable dans JUnit
Comment tester l'étendue privée avec JUnit
Le test JUnit 5 Gradle génère une erreur avec l'annotation Lombok
[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
Une méthode prend en charge plusieurs cas de test avec @ParameterizedTest!
[Ruby] Mots clés avec mots clés et valeurs par défaut des arguments
Comment exécuter une méthode et simuler avec JUnit
Présentation des tests Java automatisés avec JUnit 5 + Apache Maven
Comment tester les interruptions pendant Thread.sleep avec JUnit
Créez et testez des applications Java + Gradle avec Wercker
Test JUnit facile de la version Elasticsearch 2018 avec Embedded-elasticsearch
Tester le code à l'aide d'une maquette avec JUnit (centre EasyMock)
Visualisez la méthode de test en cours d'exécution dans TestNG dans l'écouteur
Fonctions et méthodes
Exécutez Maven sur Java 8 lors de la compilation sur Java 6 et des tests sur Java 11
Tester le contenu d'un fichier Excel avec JUnit
[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]
Tester l'API Web avec junit
J'ai écrit un test avec Spring Boot + JUnit 5 maintenant