Advanced   Java   Services JUnit in Eclipse


JUnit in Eclipse

Ein JUnit-Test testet Methoden und Konstruktoren einer Klasse. JUnit-Tests sind bereits in Eclipse integriert. Dazu greift Eclipse auf die Datei junit.jar zu.

JUnit erzeugt eine eigene Klasse mit leeren Testmethoden. Den Code zu diesen Methoden muß man natürlich selbst entwerfen. In den von JUnit angelegten Testmethoden ruft man dann die zu testende Methode mit bestimmten Parametern auf. Zu bestimmten Parametern sollte die Methode ein bestimmtes Ergebnis liefern. Mit Hilfe von Assertions vergleicht man das erwartete Ergebnis mit dem tatsächlichen Ergebnis.

Für diesen Vergleich stehen in der Klasse org.junit.Assert  statische Methoden zur Verfügung, mit denen man sehr differenzierte Vergleiche für verschiedene Situationen anstellen kann. Hier einige der einfachsten Assertions:

MethodeBedeutung
assertFalse(boolean condition)Asserts that a condition is false.
assertTrue(boolean condition)Asserts that a condition is true.
assertNotNull(Object object)Asserts that an object isn't null.
assertNull(Object object)Asserts that an object is null.
assertEquals(Object expected, Object actual)Asserts that two objects are equal.

Alle Methoden gibt es in zwei Varianten, die zweite Fassung ergänzt die erste um den Parameter String message als ersten Parameter.

MethodeBedeutung
assertFalse(String message, boolean condition)Asserts that a condition is false.
assertTrue(String message, boolean condition)Asserts that a condition is true.
assertNotNull(String message, Object object)Asserts that an object isn't null.
assertNull(String message, Object object)Asserts that an object is null.
assertEquals(String message, Object expected, Object actual)Asserts that two objects are equal.

JUnit API

JUnit ist (natürlich) in Java geschrieben und daher kennt man den Aufbau der API. Leider ist die API in zwei Teile aufgeteilt.

Die ältere 3.8 API findet man unter JUnit3.8.1 APIDOC
Die neuere 4.x API findet man unter JUnit 4.x APIDOC






Anlegen eines JUnit Test Case (Beispiel 1)

Ein JUnit Tast Case wird immer zu einem bestehendem Projekt angelegt. Als Beispiel gehen wir von einer Klasse Wochentag aus. Diese enthält eine statischen Methode getWochentag(int tag, int monat, in jahr), die nach einer alten (aber nicht veralteten) Formel von Gauß zu einem übergebenen Datum den Wochentag liefert.

public class Wochentag
{
   public static String getWochentag(int tag, int monat, int jahr)
   {
      int wochentag;
      int h = monat, k = jahr ;

      if (monat < 3)
      {
         h = monat + 12 ;
         k = jahr-1 ;
      }

      //wochentag = (tag+2*h + (3*h+3)/5 + k + k/4 - k/100 + k/400 + 1)%7 ; // richtige Formel
      // Vorzeichenfehler in der Formel:
      wochentag = (tag+2*h + (3*h+3)/5 + k + k/4 + k/100 - k/400 + 1)%7 ;

      switch (wochentag)
      {
         case 0 : return "Sonntag";
         case 1 : return "Montag";
         case 2 : return "Dienstag";
         case 3 : return "Mittwoch";
         case 4 : return "Donnerstag";
         case 5 : return "Freitag";
         case 6 : return "Samstag";
         default: return "gibts nicht";
      }
   }
}  // end class

In diese Formel hat sich ein Vorzeichenfehler eingeschlichen. Wir legen nun ein Test Case an.

Je nach Eclipseversion:

   Projekt (oder Javadatei) markieren -> rechte Maustaste (Kontextmenu) -> New -> JUnit Test Case
oder
   Projekt (oder Javadatei) markieren -> rechte Maustaste (Kontextmenu) -> New -> Other ->JUnit Test Case

Wir geben der von JUnit zu erzeugenden Datei den Namen der Klasse, in der die zu testende Methode liegt und hängen an den Namen das Wort Test an.

Im folgenden Dialog wird auch noch angeboten ob die zu erzeugende Testmethode final angelegt werden soll. Auf die sonst noch angebotenen vier Methoden verzichten wir in diesem einfachen Beispiel.

Eclipse fügt für uns die notwendigen Bibliotheken ein und JUnit erzeugt uns eine Klasse WochentagTest mit einer von uns zu füllenden Testmethode:

import static org.junit.Assert.*;
import org.junit.Test;

public class WochentagTest
{
  @Test
  public /* final */ void testGetWochentag()
  {
    fail("Not yet implemented"); // TODO
  }
}

Wir schreiben einen Testfall und benützen dazu assertEquals.

public class WochentagTest
{
   @Test
   public void testGetWochentag()
   {
      // sollte Donnerstag sein
      String tag = Wochentag.getWochentag(31, 03, 2016);
      assertEquals("Donnerstag", tag);
   }
}

Starten des Tests

Es gibt kleine Varianten um den Test zu starten. Hier eine Variante.


Die Anzeige

Das Ergebnis wird als Fenster neben dem Konsolfenster angezeigt.

eclipse-junit-13.jpg

Der Meldung von JUnit kann man entnehmen, daß die Methode nicht den zu erwartetenden Wochentag "Donnerstag" zurückgibt.