Ausführen eines datengesteuerten JUnit 4-Tests mit mehreren Daten

Krishnom:

Ich versuche, Junit-Tests für eine Klasse mit zwei überladenen Methoden zu schreiben. Hier ist mein Code im Test

public class Solution {
    public static String getDurationString(int minute, int seconds) {
        if (minute < 0) {
            return "Invalid Value";
        } else if (seconds < 0 || seconds > 59) {
            return "Invalid Value";
        } else {
            int hours = minute / 60;
            minute %= 60;
            return getTimeString(hours) + "h " + getTimeString(minute) + "m " + seconds + "s";
        }
    }

    public static String getDurationString(int seconds) {
        if (seconds < 0) {
            return "Invalid Value";
        }

        int minutes = seconds / 60;
        seconds %= 60;
        int hours = minutes / 60;
        minutes %= 60;

        return getTimeString(hours) + "h " + getTimeString(minutes) + "m " + seconds + "s";
    }

    //returns value in xx format
    private static String getTimeString(int val) {
        if (val < 10) {
            return "0" + val;
        }
        return "" + val;
    }
}

Ich kann die Funktion getDurationString (min, sec) anhand einiger Daten mit dem parametrisierten Runner von JUnit testen. Ich möchte denselben Testcode verwenden, um einen Test für die Funktion getDurationString (sec) zu schreiben, bin mir aber nicht sicher, wie ich das machen soll. Ich habe mir eine Stackoverflow-Frage angesehen, aber sie hilft nicht (möglicherweise, weil ich JUnit4 verwende).

Irgendeine Idee, wie dies mit JUnit4 erreicht werden kann?

UPDATE: Testcode als Referenz hinzugefügt

import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import java.util.Arrays;
import static org.junit.Assert.assertEquals;

@RunWith(Parameterized.class)
class SolutionTest {

    @Parameterized.Parameters(name = "Test{index} -> {0} min {1} sec returns {2}")
    public static Iterable<Object[]> dataForTwoParameterMethod() {
        return Arrays.asList(new Object[][]{
                {-1, 10, "Invalid Value"}, //minutes < 0 returns "Invalid value"
                {1, -1, "Invalid Value"}, //Negative seconds value
                {61, 50, "01h 01m 50s"}, //valid value returns time in format "XXh YYm ZZs"
        });
    }

    int minute;
    int seconds;
    String durationString;

    public SolutionTest(int minute, int seconds, String durationString) {
        this.minute = minute;
        this.seconds = seconds;
        this.durationString = durationString;
    }

    @Test
    public void getDurationString() {
        assertEquals(durationString, Solution.getDurationString(minute, seconds));
    }

    @Test @Ignore("TODO: Not able to find a way to inject two different data into one JUnit Test")
    public void testGetDurationString() {
        //TODO: how to use two data in single data driven test
    }
}
Dirk Herrmann :

Wenn ich Sie richtig verstehe, haben Sie einen Satz von Parametern:

{-1, 10, "Invalid Value"}, //minutes < 0 returns "Invalid value"
{1, -1, "Invalid Value"}, //Negative seconds value
{61, 50, "01h 01m 50s"}, //valid value returns time in format "XXh YYm ZZs"

mit denen Sie die Methode mit zwei Argumenten testen getDurationString. Und - so verstehe ich - möchten Sie vielleicht auch einen zweiten Parametersatz bereitstellen

{-1, "Invalid Value"}, //seconds < 0 returns "Invalid value"minutes, "
{0, "00h 00m 00s"}, //boundary case, everything zero
{1, "00h 00m 01s"}, //last digit (seconds)
{10, "00h 00m 10s"}, //but last digit (seconds)
{59, "00h 00m 59s"}, //boundary case
{60, "00h 01m 00s"}, //boundary case, last digit (minutes)
...

um die Ein-Argument-Methode zu testen getDurationString. Um dies mit JUnit4 zu tun, müssen Sie jedoch eine zweite Testklasse erstellen - Sie können nicht zwei verschiedene Parametersätze in dieselbe Klasse einfügen.

Sie können in einer Klasse mit parametrisierten Tests viele Testmethoden haben - aber alle arbeiten mit demselben Parametersatz, wie unter definiert @Parameterized.Parameters.

Beachten Sie, dass sich dies von der Art und Weise unterscheidet, wie parametrisierte Tests in JUnit5 implementiert werden: In JUnit5 kann für jede einzelne parametrisierte Testmethode separat entschieden werden, welche Eingabeparameter die Testmethode erhalten soll. Dazu werden jede Testmethode mit den Informationen versehen, aus denen die Testdaten stammen: https://junit.org/junit5/docs/current/user-guide/#writing-tests-parameterized-tests

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

Ausführen eines einzelnen JUnit4-Tests in Eclipse mit Maven

Unterschied zwischen dem Ausführen eines Tests mit RunWith(Junit4::class)-Annotation und ohne sie

Ausführen eines einzelnen TestNG-Tests auf mehreren Threads gleichzeitig mit Maven

Ausführen eines parallelen Tests (pro Test) mit Gradle und JUnit

NullPointerException beim Ausführen des JUnit4-Tests mit MockitoHint "Unused ..." und "args ok?"

Durchführen eines Wilcoxon-Tests mit mehreren Testgruppen

ClassNotFoundException beim Ausführen eines Junit-Tests in Eclipse

Ausführen eines @ Ignored JUnit-Tests in Eclipse

Das erneute Ausführen eines parametrisierten JUnit-Tests mit einem String-Array-Parameter schlägt fehl

Ausführen von JUnit 5-Tests mit Ausführen als> SWTBot-Tests in Eclipse

Ausführen eines ähnlichen Programms in mehreren Kernen mit unterschiedlichen Variablen

Ausführen eines Spring Boot-Projekts mit mehreren Hauptklassen

Ausführen eines Go-Programms mit mehreren Dateien

Ausführen eines Programms mit mehreren Dateien in SLURM

Ausführen von JUnit-Tests mit Maven unter Eclipse

Ausführen von AsyncHttpClient mit JUNIT-Tests

ClassNotFoundException beim Ausführen von JUnit-Tests mit Ant

Übergeben von JUL-Protokollanweisungen an Log4j2 beim Ausführen von jUnit-Tests mit Gradle

Ausführen nur eines einzigen Tests mit CMake + make

UndefinedStepException beim Ausführen eines Tests mit Cucumber JVM

Ausführen eines Go-Tests mit einer Transaktion

Tests unter JUnit 4 laufen, aber nicht JUnit 5 - Kompiliert sauber, aber 0 Tests ausführen

Ist das Ausführen von Tests mit JUnit 3.x gegenüber JUnit 4.x immer noch eine bewährte Methode?

Einrichten und Herunterfahren mit datengesteuerten Tests von py.test

Vergleichen von Daten mit JUnit-Tests

Durchführen eines ANOVA-Tests aus einer Datentabelle mit mehreren Spalten

Python-Skript: Ausführen eines Skripts mit mehreren Argumenten mithilfe eines Unterprozesses

Ausführen eines Datenflussjobs mit mehreren Ein- / Ausgängen mit gcloud cli

Warum teilen meine mehreren Container eines Neo4j-Bildes Daten mit Docker?

TOP Liste

  1. 1

    So legen Sie mit dem Interface Builder unterschiedliche führende Speicherplätze für unterschiedliche Geräte fest

  2. 2

    Fügen Sie eine weitere Schaltfläche zu gwt Suggest Box hinzu

  3. 3

    Wie konvertiere ich einen Vektor von Bytes (u8) in eine Zeichenfolge?

  4. 4

    Wie kann ich in SCSS mehrere Klassen zu einer einzigen kombinieren?

  5. 5

    Wie konvertiert man einen Datenrahmen im langen Format in eine Liste mit einem geeigneten Format?

  6. 6

    Speichern Sie ein MPAndroidChart-Diagramm in einem Bild, ohne es in einer Aktivität anzuzeigen

  7. 7

    Gruppieren Sie Datenrahmenspalten nach ihrem Datum (die Spaltentitel enthalten) und fassen Sie die Instanzen von Einsen und Nullen in R . zusammen

  8. 8

    Tomcat - Leiten Sie den alten Kontextstamm zum neuen Kontextstamm um

  9. 9

    Eclipse Oxygen - Projekte verschwinden

  10. 10

    Wie wählt man Unterschiede mit drei Tabellen aus?

  11. 11

    Tic Tac Toe-Spiel im React-Reset-Button funktioniert nicht

  12. 12

    So berechnen Sie die Verfügbarkeit von Anwendungen (SLA)

  13. 13

    ElasticSearch BulkShardRequest ist aufgrund von org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor fehlgeschlagen

  14. 14

    Wie kann ich den Kaskadenmodus global einstellen?

  15. 15

    Python: Spalten mit demselben Namen zusammenführen, wobei der Mindestwert beibehalten wird

  16. 16

    So erhalten Sie eine gleichmäßige Höhe für alle Eingabefelder

  17. 17

    Wie erstelle ich einen neuen übergeordneten Knoten außerhalb der .ref (/ path) in der Firebase-Echtzeitdatenbank mithilfe von Cloud-Funktionen (Typescript)?

  18. 18

    Was ist schneller: SUM über NULL oder über 0?

  19. 19

    Wie kann ich eine verschachtelte Schleife mit lapply in R ersetzen?

  20. 20

    Kann ich ein Tkinter-Canvas erstellen, das mehrere Zeilen in einem Text-Widget umfasst?

  21. 21

    Ärgerliches Problem mit yaml, das ich nicht lösen kann

heißlabel

Archiv