À propos de TestSize préconisé par Google et comment réaliser TestSize par Java et Maven

Qu'est-ce que la taille du test?

Développement de logiciels Google visible à partir des tests et Google Testing Blog Selon (http://testing.googleblog.com/2010/12/test-sizes.html), Google unifie les catégories de test des développeurs (jusque-là, test système, test EtoE, test UI, test Selenium, etc. Puisqu'il existe des expressions et qu'aucune d'elles ne définit clairement de quel type de test il s'agit), nous avons introduit le concept de TestSize et défini chacune comme suit.

S(Small)tester M(Medium)tester L(Large)tester E(Enormous)tester
Objectif temporel (pour chaque méthode) Exécuter en moins de 100 ms Exécuter en moins de 1 s Courez aussi vite que possible Courez aussi vite que possible
Temps d'exécution maximum Arrêt forcé de la cible de test S 1 minute après le démarrage Arrêt forcé de la cible de test M 5 minutes après le démarrage Arrêt forcé de la cible de test L 15 minutes après le démarrage Terminer de force la cible de test E 1 heure après le démarrage
Test S Test M Test L Test E
Service réseau (socket ouvert) moquer localhost uniquement
Base de données moquer
Accès au système de fichiers moquer
Accès au système face à l'utilisateur moquer Non recommandé
Exécution des appels système × Non recommandé
Multithread Non recommandé
déclaration de sommeil ×
Propriétés du système ×

Division du timing d'exécution par TestSize

En définissant le moment d'exécution des tests pour chaque TestSize, le nombre de tests requis peut être exécuté dans la phase requise et un retour rapide peut être donné à l'utilisateur.

Par exemple, à la suite de l'article Cookpad, le timing d'exécution peut être divisé comme suit. Ce faisant, Cookpad peut exécuter le test par pull request dans les 5 minutes et donner des commentaires à l'utilisateur à un stade précoce.

Test S Test M Test L Test E
Moment d'exécution Pour chaque pull request Chaque pull request ou chaque fois qu'il est fusionné dans Master Facultatif ou par version Facultatif ou par version

Réalisation de TestSize par Java et Maven

Alors, comment divisez-vous TestSize et son calendrier d'exécution? Ici, nous allons expliquer le cas de l'utilisation de Java et Maven.

environnement

Classe de catégorie et annotation

À partir de JUnit 4.8, une annotation appelée Category a été ajoutée à JUnit, qui est un framework de test Java typique. En marquant la méthode ou la classe à tester avec @ Category, vous pouvez avoir un contrôle précis sur ce qui est exécuté à partir de la suite de tests.

Pour plus de détails, veuillez consulter cet article.

Définir une interface pour chaque TestSize La cible d'exécution du test peut être contrôlée en passant l'interface définie à l'argument de @ Category.

package hogehoge;

public interface Small {}
package hogehoge;

public interface Medium {}
public class hoge {
    @Category(Small.class)
    @Test
    public void a() {
        fail();
    }

    @Category(Medium.class)
    @Test
    public void b() {
        fail();
    }
}

Comment spécifier TestSize par Maven

Si TestSize peut être passé en paramètre lorsque Maven est exécuté, il est possible de diviser la synchronisation d'exécution par TestSize.

Si possible, ce serait bien de pouvoir le faire. Si TestSize n'est pas spécifié, tous les tests peuvent être exécutés et un ou plusieurs TestSize peuvent être spécifiés. Dans ce cas, le test TestSize spécifié est exécuté.

mvn test // All tests run.
mvn test -P Small // Small tests run.
mvn test -P Small,Medium // Small and medium tests run.

Les paramètres de Maven pour réaliser ce qui précède sont les suivants. Spécifiez TestSize dans groups de maven-surefire-plugin. Par défaut, vide est spécifié afin que tous les tests soient exécutés lorsqu'aucun argument n'est spécifié.

<project ...>
    <properties>
        <testcase.groups></testcase.groups>
    </properties>

    <profiles>
        <profile>
            <id>Small</id>
            <properties>
                <testcase.groups>hogehoge.Small</testcase.groups>
            </properties>
        </profile>
        <profile>
            <id>Medium</id>
            <properties>
                <testcase.groups>hogehoge.Medium</testcase.groups>
            </properties>
        </profile>
    </profiles>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.19.1</version>
                <configuration>
                    <argLine>-Dfile.encoding=UTF-8</argLine>
                    <groups>${testcase.groups}</groups>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Résumé

Google, Cookpad a souvent écrit sur TestSize, mais je n'avais pas d'article sur la façon de le faire, alors je l'ai écrit. Je suis honoré d'être d'une quelconque aide.

Recommended Posts

À propos de TestSize préconisé par Google et comment réaliser TestSize par Java et Maven
[Java] Comment sortir et écrire des fichiers!
[Java] [Maven3] Résumé de l'utilisation de Maven3
[Java] Comment utiliser la classe FileReader et la classe BufferedReader
Comment obtenir et étudier Java SE8 Gold
Comment accéder aux méthodes et champs Java Private
[Java] Comment utiliser la classe Calendar et la classe Date
[Java] Types de commentaires et comment les rédiger
[Java] Comment obtenir la clé et la valeur stockées dans Map par traitement itératif
Comment lire la gestion de la mémoire Java et GC Viewer
[Java] Comment obtenir une requête par communication HTTP
[Java] Comment découper une chaîne de caractères caractère par caractère
Comment convertir A en A et A en A en utilisant le produit logique et la somme en Java
Comment démarrer par environnement avec Spring Boot de Maven
Introduction à Effective Java en pratiquant et en apprenant (modèle Builder)
Différence entre Java et JavaScript (comment trouver la moyenne)
Que s'est-il passé dans «Java 8 to Java 11» et comment créer un environnement
Comment appeler et utiliser l'API en Java (Spring Boot)
Comment écrire et noter lors de la migration de VB vers JAVA
Comment développer et enregistrer une application Sota en Java
Réfléchissez à la façon de diviser MVC en M et V
Différences dans la gestion des chaînes entre Java et Perl
Une histoire de malentendu sur l'utilisation du scanner Java (mémo)
Comment abaisser la version java
[Java] Comment utiliser Map
Java - Comment créer JTable
Comment utiliser java Facultatif
Comment réduire les images Java
Comment rédiger un commentaire java
Comment utiliser la classe Java
[Java] Comment utiliser removeAll ()
[Java] Comment afficher les Wingdings
[Java] À propos de String et StringBuilder
Comment utiliser Java Map
Comment définir des constantes Java
Comment utiliser les variables Java
À propos du package Java et de l'importation
Comment convertir la base Java
[Java] Comment implémenter le multithreading
Comment initialiser un tableau Java
Bases du développement Java ~ Comment écrire des programmes (variables et types) ~
[Java] Comment utiliser les modificateurs statiques (Que sont l'importation statique finale et statique)
Comment gérer le code Java généré automatiquement par l'exemple jOOQ et Flyway
[Java] Comment convertir du type String en type Path et obtenir le chemin
À propos des méthodes Java statiques et non statiques
Que diriez-vous de TECH ACADEMY ?? [Cours Java]
Comment utiliser EventBus3 et ThreadMode
Étudier Java # 6 (Comment écrire des blocs)
[Introduction à Java] À propos des expressions lambda
À propos de Biocontainers fastqc et Java
[Introduction à Java] À propos de l'API Stream
Comment créer un conteneur Java
[Java débutant] À propos de l'abstraction et de l'interface
Comment désassembler un fichier de classe Java