Erstellen Sie einen JUnit-Test für eine Methode, der alle Aufrufe im Eclipse-Arbeitsbereich abdeckt

StackOverflow https://stackoverflow.com//questions/11658056

  •  11-12-2019
  •  | 
  •  

Frage

Nehmen wir folgende Java-Klasse an:

class MyClass {
   public String methodA( String data, String expression ) {
      // expression is evaluated using data
      // ...
      // this leads to a result which is returned
      return result;
   }
}

Beachten Sie, dass expression ist eine Instanz einer Ausdruckssprache (DSL).Somit ist die Bewertung von expression verwenden data kommt auf die Kombination beider an.Normalerweise, expression ist ein fester Wert, der sich nicht oft ändert und data kann sich bei allen Aufrufen ändern.

Nun, irgendwann später wird ein Fehler gefunden MyClass.methodA(String,String).Der Fehler liegt in einer zugrunde liegenden Klasse und tritt nur bei einer speziellen Kombination von auf expression Und data.Für diesen Sonderfall lässt sich leicht ein JUnit-Test schreiben und beheben.

Leider wird diese Methode im gesamten Projekt häufig verwendet.Die Eclipse-Aufrufhierarchie identifiziert mehr als 97 andere Methoden, bei denen diese Methode verwendet wird.Ich befürchte jetzt einen Rückschritt, wenn ich nur den Bugfix anwende.Um mich sicherer zu fühlen, würde ich gerne einige Regressionstests durchführen.

Normalerweise sollten Unit-Tests alle wichtigen Arten von Aufrufen berücksichtigen, insbesondere Grenzfälle.Aber expression Da es sich um ein DSL handelt, das sehr unterschiedlich sein kann, ist es nicht einfach, alle potenziellen Nutzungen testweise abzudecken.Darüber hinaus würden diese Tests keine falsche Verwendung aufgrund des Fehlers erkennen.

Meine Idee ist also, wie folgt vorzugehen:

  1. Finden Sie alle Aufrufe dieser Methode (z. B. die Verwendung von „Call hierarchy“ in Eclipse) und extrahieren Sie alle Werte dafür expression.

  2. Probieren Sie genügend reale Werte aus data (z.B.aus der Datenbank) und vergleichen Sie alle Ausdrücke ab dem ersten Schritt mit der Originalversion von MyClass.methodA(String,String).Speichern Sie die Tripel (data, expression, result) zu einer Datei.

  3. Bugfix implementieren.

  4. Testmethode MyClass.methodA(String,String) Verwenden Sie die obige Datei, um sicherzustellen, dass sich die Ergebnisse nicht geändert haben.

Folgende Fragen:

Was halten Sie von diesem Ansatz?

Wenn ich die Aufrufhierarchie in Eclipse verwende, kann ich nur die aufrufenden Methoden kopieren und einfügen, nicht jedoch den genauen Aufruf einschließlich der Argumente in die Zwischenablage (vgl.Schritt 1).Ich müsste den aufrufenden Aufruf für jede gefundene Methode manuell kopieren.Wie extrahiere ich die Aufrufe auf komfortable Weise (im gesamten Eclipse-Arbeitsbereich, also in mehreren Projekten)?

IMHO teste ich nur eine einzige Methode, daher decken die Tests nur eine Einheit ab.Ist es in Ordnung, JUnit für Schritt 4 zu verwenden, oder gibt es etwas Anspruchsvolleres?

War es hilfreich?

Lösung

Da der erwartete Mehrwert durch das Testen Ihrer Software darin besteht, die meisten Umstände mit niedrigsten Kosten und maximalem Ergebnis abzudecken, würde ich Ihrem Ansatz zustimmen.

Das Erfassen realer Beispielwerte aus Ihrer Software und das Speichern in einer repräsentativen Datei sollte nicht so komplex sein und scheint mir die beste Möglichkeit zu sein, diese Sache zu analysieren.Auch wenn Sie es manuell kopieren müssen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top