JAXenter.de

Das Portal für Java, Architektur, Cloud & Agile

MagicTest - Visuelles Testen mit Java

X

Vorfreude auf Java 9: Die ersten Features sind bekannt.

MagicTest

MagicTest - Visuelles Testen mit Java

Thomas Mauch

MagicTest ist ein neues Test-Framework für Java. Es zeichnet sich durch einen visuellen Ansatz aus, welcher die Unzulänglichkeiten bekannter Test-Frameworks wie TestNG oder JUnit behebt. So sind keine Assert-Statements notwendig, um die erwarteten Resultate zu prüfen. Negative Tests brauchen keine Hilfskonstrukte, komplexe Objekte und große Datenmengen können einfach verarbeitet werden. Zudem wird der Unterhalt der Tests entscheidend vereinfacht, und ein übersichtlicher HTML-Report macht die Tests für Dritte nachvollziehbar. Damit wird das Testen nicht nur effizienter, sondern macht endlich auch Spaß!

Mehr zum Thema

Wer mehr über das MagicTest-Framework erfahren möchte, dem sei das kommende Eclipse Magazin 2.2013 empfohlen. Thomas Mauch stellt dort die Arbeit mit MagicTest in einem ausführlichen Tutorial vor. Erscheinungstermin: 25.1.2013

www.eclipse-magazin.de

Testen bzw. das Schreiben von Tests gehören heute zum täglichen Brot eines Java-Entwicklers, genauso wie das Schreiben des eigentlichen Source Codes. Trotzdem bleibt das Gefühl, dass die Testerei von den Entwicklern noch immer mehr als lästige Pflicht denn als gleichwertige Arbeit gesehen wird, da die für die Tests benötigte Zeit beim Entwickeln der produktiven Software fehlt. Die Hauptaufgabe des perfekten Test-Frameworks muss deshalb sein, das Erstellen und auch Unterhalten von Tests so effizient wie möglich zu machen.

Listing 1
public static String join(String s1, String s2) {
   if (s1 == null || s2 == null) {
      throw new IllegalArgumentException("Null strings are not allowed");
   }
   return s1 + " " + s2;
}

Testen heute

Als Einführung in die Welt der heutigen Tests betrachten wir ein einfaches Beispiel, das eine join-Methode (siehe Listing 1) testet und aus einem positiven und einem negativem Test besteht. Wenn dies mit einem Framework wie TestNG realisiert wird, sieht der Code wie folgt aus:

@Test
public void testJoin() {
   assertEquals("Hello MagicTest", join("Hello", "MagicTest"));
   try {
      join("Hello", null);
      fail();
   }
   catch (IllegalArgumentException e) {
   }
}

Bereits auf den ersten Blick fällt auf, dass positive und negative Tests unterschiedlich formuliert werden müssen:

  • Bei positiven Tests geschieht die Überprüfung der Korrektheit mit Assertions. Dies bedeutet, dass das erwartete Resultat in den Testcode integriert werden muss.
  • Bei negativen Tests, wo eine Exception erwartet wird, muss diese explizit mit try-catch abgefangen werden, um zu verhindern, dass das Test-Programm vorzeitig beendet wird.

Der Grund, weshalb die Tests so unterschiedlich formuliert werden müssen, hängt mit der Definition zusammen, wann ein Test bei der Ausführung als korrekt beurteilt wird: Ein Test gilt dann als korrekt, wenn er abgearbeitet wird, ohne dass eine Assertion fehlschlägt, bzw. ohne dass eine nicht erwartete Exception auftritt. Das Aussehen des Test-Codes wird offensichtlich weitgehend von den Möglichkeiten der Sprache bestimmt, denn in einem Testplan unterscheiden sich die beiden Testfälle nicht grundlegend (Tabelle 1).

Methode Argumente Resultat
Join "Hello", "MagicTest" "Hello MagicTest"
Join "Hello", null IllegalArgumentException
 

Kommentare

Ihr Kommentar zum Thema

Als Gast kommentieren:

Gastkommentare werden nach redaktioneller Prüfung freigegeben (bitte Policy beachten).