[JAVA] Steuern Sie die Testreihenfolge in Junit4 mit einem Aufzählungstyp

Überblick

JUnit garantiert nicht die Ausführungsreihenfolge der durch die Annotation @ Test definierten Methoden.

Erstellen Sie daher die folgenden drei Klassen, um die Ausführungsreihenfolge zu steuern.

Als Prozessablauf wurde bei der Ausführung des Tests jeder Testmethode "OrderedRunner" hinzugefügt. Der Ablauf besteht darin, die Ausführungsreihenfolge durch Lesen des Einstellwerts von "Reihenfolge" zu steuern.

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

Trainieren

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

    //Selbst wenn Sie einen Test hinzufügen, wird die Reihenfolge durch Hinzufügen eines Elements zu TestMethod garantiert.
    /**
     * @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");
    }
}

Referenzmaterial

Recommended Posts

Steuern Sie die Testreihenfolge in Junit4 mit einem Aufzählungstyp
Machen Sie einen Unit-Test mit Junit.
Testen Sie die Web-API mit junit
Testen Sie private Methoden in JUnit
Testen Sie private Methoden in JUnit
JUnit-Testbericht in Maven ausgeben
[Java] Testen Sie private Methoden mit JUnit
Testen Sie den Spring Framework Controller mit Junit
Reihenfolge der Vor- und Nachbearbeitung des JUnit-Unit-Tests
So filtern Sie den JUnit-Test in Gradle
Einführung in den Parametrisierungstest in JUnit
So testen Sie den privaten Bereich mit JUnit
Der JUnit 5-Gradle-Test führt zu einem Fehler mit der Lombok-Annotation
Einführung eines automatisierten Java-Tests mit JUnit 5 + Gradle
So testen Sie eine private Methode, die ein Array- oder Argument variabler Länge in JUnit verwendet
[Java] So testen Sie, ob es in JUnit null ist
[CircleCI 2.0] [Java] [Maven] [JUnit] Aggregieren Sie die JUnit-Testergebnisse mit CircleCI 2.0
Testen Sie den Controller mit Mock MVC im Spring Boot
So testen Sie Interrupts während Thread.sleep mit JUnit
Einfacher JUnit-Test der Elasticsearch 2018-Version mit Embedded-Elasticsearch
JUnit 5: Wie man Testfälle in enum schreibt
Testcode mit Mock mit JUnit (EasyMock Center)
Refactoring in JUnit
Visualisieren Sie die in TestNG ausgeführte Testmethode im Listener
Mischen Sie Testfälle mit JUnit 5 und Standardmethoden
So sortieren Sie mit SQLite in aufsteigender / absteigender Reihenfolge
Setup mit anfänglichen Testdaten, die in den Db2 / DB-Container eingefügt wurden
Rufen Sie den Namen des Testfalls in der JUnit-Testklasse ab
Testen Sie den Inhalt einer Excel-Datei mit JUnit
Implementieren Sie Test Double in JUnit, ohne externe Bibliotheken zu verwenden
[JUnit 5-kompatibel] Schreiben Sie einen Test mit JUnit 5 mit Spring Boot 2.2, 2.3
[JUnit 5] Schreiben Sie einen Validierungstest mit Spring Boot! [Parametrisierungstest]
Web-API-Komponententest und Integrationstest mit SpringBoot + Junit5, 4 Muster
Ich habe jetzt einen Test mit Spring Boot + JUnit 5 geschrieben
Integrationstest mit Gradle
[Schienen] Test mit RSpec
Testen Sie Nokogiri mit Rspec.
Automatisch mit Messgerät testen
Lasttest mit JMeter
Testen der Sende- und Empfangslogik von Anforderungen mit MockWebServer in JUnit
[Java] Ich möchte Standardeingabe und Standardausgabe mit JUnit testen