Informationen zu TestSize, das von Google empfohlen wird, und zur Realisierung von TestSize durch Java und Maven

Was ist die Testgröße?

Google-Softwareentwicklung beim Testen sichtbar und Google Testing Blog Laut (http://testing.googleblog.com/2010/12/test-sizes.html) vereinheitlicht Google die Testkategorien der Entwickler (bis dahin Systemtest, EtoE-Test, UI-Test, Selentest usw.). Da es Ausdrücke gibt und keiner von ihnen klar definiert, um welche Art von Test es sich handelt, haben wir das Konzept von TestSize eingeführt und jeweils wie folgt definiert.

S(Small)Prüfung M(Medium)Prüfung L(Large)Prüfung E(Enormous)Prüfung
Zeitliches Ziel (für jede Methode) Laufen Sie in weniger als 100 ms Laufen Sie in weniger als 1s Lauf so schnell wie möglich Lauf so schnell wie möglich
Maximale Ausführungszeit Erzwungene Beendigung des S-Testziels 1 Minute nach dem Start Erzwungene Beendigung des M-Testziels 5 Minuten nach dem Start Erzwungene Beendigung des L-Testziels 15 Minuten nach dem Start Beenden Sie das E-Testziel 1 Stunde nach dem Start zwangsweise
S Test M Test L Test E Test
Netzwerkdienst (Socket offen) spotten nur localhost
Datenbank spotten
Dateisystemzugriff spotten
Zugriff auf das System für den Benutzer spotten Nicht empfohlen
Ausführung von Systemaufrufen × Nicht empfohlen
Multi Thread Nicht empfohlen
Schlafaussage ×
Systemeigenschaften ×

Aufteilung des Ausführungszeitpunkts durch TestSize

Durch Definieren des Testausführungszeitpunkts für jede Testgröße kann die erforderliche Anzahl von Tests in der erforderlichen Phase ausgeführt werden, und dem Benutzer kann eine schnelle Rückmeldung gegeben werden.

Nach dem Cookpad-Artikel kann der Ausführungszeitpunkt beispielsweise wie folgt unterteilt werden. Auf diese Weise kann Cookpad den Test per Pull-Anfrage innerhalb von 5 Minuten ausführen und dem Benutzer frühzeitig Feedback geben.

S Test M Test L Test E Test
Ausführungszeitpunkt Für jede Pull-Anfrage Jede Pull-Anfrage oder jedes Mal, wenn sie mit dem Master zusammengeführt wird Optional oder pro Version Optional oder pro Version

Realisierung von TestSize durch Java und Maven

Wie teilen Sie TestSize und dessen Ausführungszeitpunkt auf? Hier erklären wir den Fall der Verwendung von Java und Maven.

Umgebung

Kategorieklasse und Anmerkung

Ab JUnit 4.8 wurde JUnit, einem typischen Java-Testframework, eine Anmerkung namens Category hinzugefügt. Durch Markieren der zu testenden Methode oder Klasse mit "@ Category" können Sie genau steuern, was in der Testsuite ausgeführt wird.

Weitere Informationen finden Sie in diesem Artikel.

Definieren Sie für jede Testgröße eine Schnittstelle Sie können das Testausführungsziel steuern, indem Sie die definierte Schnittstelle an das Argument "@ Category" übergeben.

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();
    }
}

So geben Sie TestSize von Maven an

Wenn TestSize bei der Ausführung von Maven als Parameter übergeben werden kann, kann der Ausführungszeitpunkt durch TestSize geteilt werden.

Wenn möglich, wäre es schön, dies tun zu können. Wenn TestSize nicht angegeben ist, können alle Tests ausgeführt und eine oder mehrere TestSizes angegeben werden. In diesem Fall wird der angegebene TestSize-Test ausgeführt.

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

Mavens Einstellungen, um das oben genannte zu erreichen, sind wie folgt. Geben Sie TestSize in "Gruppen" des "Maven-Surefire-Plugins" an. Standardmäßig wird leer angegeben, damit alle Tests ausgeführt werden, wenn kein Argument angegeben wird.

<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>

Zusammenfassung

Google, Cookpad hat oft über TestSize geschrieben, aber ich hatte keinen Artikel darüber, wie es geht, also habe ich es geschrieben. Es ist mir eine Ehre, Ihnen behilflich zu sein.

Recommended Posts

Informationen zu TestSize, das von Google empfohlen wird, und zur Realisierung von TestSize durch Java und Maven
[Java] Wie man Dateien ausgibt und schreibt!
[Java] [Maven3] Zusammenfassung der Verwendung von Maven3
[Java] Verwendung der FileReader-Klasse und der BufferedReader-Klasse
Wie man Java SE8 Gold bekommt und studiert
So greifen Sie auf Java Private-Methoden und -Felder zu
[Java] Verwendung der Kalenderklasse und der Datumsklasse
[Java] Arten von Kommentaren und wie man sie schreibt
[Java] So erhalten Sie den Schlüssel und den Wert, die in Map gespeichert sind, durch iterative Verarbeitung
Lesen von Java Memory Management und GC Viewer
[Java] So erhalten Sie eine Anfrage per HTTP-Kommunikation
[Java] So schneiden Sie eine Zeichenfolge zeichenweise aus
So konvertieren Sie A in a und a in A mit logischem Produkt und Summe in Java
Booten nach Umgebung mit Spring Boot of Maven
Einführung in effektives Java durch Üben und Lernen (Builder-Muster)
Unterschied zwischen Java und JavaScript (wie man den Durchschnitt findet)
Was ist in "Java 8 bis Java 11" passiert und wie wird eine Umgebung erstellt?
Aufrufen und Verwenden der API in Java (Spring Boot)
Schreiben und Notizen bei der Migration von VB zu JAVA
So entwickeln und registrieren Sie eine Sota-App in Java
Überlegen Sie, wie Sie MVC in M und V unterteilen können
Unterschiede im Umgang mit Zeichenfolgen zwischen Java und Perl
Eine Geschichte über Missverständnisse im Umgang mit Java-Scannern (Memo)
So senken Sie die Java-Version
[Java] Verwendung von Map
Java - So erstellen Sie JTable
Verwendung von Java Optional
So minimieren Sie Java-Images
Wie schreibe ich einen Java-Kommentar
Verwendung der Java-Klasse
[Java] Verwendung von removeAll ()
[Java] So zeigen Sie Wingdings an
[Java] Über String und StringBuilder
Verwendung von Java Map
So legen Sie Java-Konstanten fest
Verwendung von Java-Variablen
Über Java-Paket und Import
So konvertieren Sie Java Base
[Java] So implementieren Sie Multithreading
So initialisieren Sie ein Java-Array
Grundlagen der Java-Entwicklung ~ Schreiben von Programmen (Variablen und Typen) ~
[Java] Verwendung statischer Modifikatoren (Was sind statische endgültige und statische Importe)
So verwalten Sie Java-Code, der automatisch von jOOQ & Flyway generiert wird
[Java] So konvertieren Sie vom Typ String in den Pfadtyp und erhalten den Pfad
Informationen zu statischen und nicht statischen Java-Methoden
Wie wäre es mit TECH ACADEMY? [Java-Kurs]
Verwendung von EventBus3 und ThreadMode
Java # 6 studieren (Wie man Blöcke schreibt)
[Einführung in Java] Über Lambda-Ausdrücke
Über Biocontainer fastqc und Java
[Einführung in Java] Informationen zur Stream-API
So erstellen Sie einen Java-Container
[Java-Anfänger] Über Abstraktion und Schnittstelle
So zerlegen Sie eine Java-Klassendatei