Home arrow Blog arrow Die JUnit Welt    Search  

 

Die JUnit Welt Print

javaHier eine kleine Beispielhafte Einführung in das Komponenten bzw. Unit Testen mit JUnit 4. Eine besser Einführung findet Ihr auf www.junit.org

Ziel: 

Kurz und knapp Wie teste ich mit JUnit 4? Getestet werden soll das Programm HelloWorld.

Es liegt das  folgende HelloWorld Programm vor:
 

public class HelloWorld {

      /**

       * Das klassische Java HelloWorld

       * @param args

       */

      public static void main(String[] args) {

            System.out.println("Hello World");

      }

}

Als erstes stellt sich die Frage was getestet werden soll? Diese Frage ist leicht beantwortet es soll  getestet werden ob das Programm „Hello World“ auf der Console ausgibt.

Hier zu legen wir uns eine JUnit Testklasse (Testfall) an. Diese Klasse sieht wie folgt aus:

public class HelloWorldTest {

} 

Jetzt sich die Frage wie müssen wir unser Unit Test implementier? Die Antwort ist ganz einfach das obere Programm kann nicht getestet werden. Wir müssen zu erst ein Refactoring durchführen.

Als erstes erstellen wir eine Funktion sayHelloWorld(). Damit sieht das Programm wie folgt aus.

public class HelloWorld {

      public static void main(String[] args) {

            new HelloWorld().sayHelloWorld();

      } 

      public void sayHelloWorld() {

            System.out.println("Hello World");

      }

}

Jetzt die ganze Sache schon Objekt orientierter aus.

Gut nun passen wir unser Test weiter an. Was kann bis jetzt getestet werden? Eigentlich immer noch nichts wir können ein Test bauen das sayHelloWorld aufruft aber mehr auch nicht. Es sieht so aus als ob das neue HelloWorld Programm keinen wesentlich Vorteil im Bezug auf JUnit  hat.

Der Test Code sieht nun wie folgt aus:

public class HelloWorldTest {

      @Test

      public void testSayHelloWorld() throws Exception {           

      }     

}

Was muss also getan werden? Wenn man Objekt Orientierte Software entwickeln will sollte diese flexibel und nicht festgekoppelt sein. Was heißt dies nun für unser HelloWorld Programm? Unser HelloWorld Programm sollte nicht fest die Ausgabe auf der Standard Ausgabe machen sondern dies sollte vom Benutzer der Klasse konfigurierbar sein. Wie macht man nun so was? Die Antwort ist einfach Schnittstellen Programmierung. Gut das heißt der Benutzer kann der Klassen mach deine Ausgabe auf einem Objekt mit dieser bestimmten Schnittstelle. Um welche Schnittstelle handelt es sich nun im konkreten Beispiel? Klar um die Schnittstelle der JDK Klasse PrintStream.

Also geben wir dem Benutzer beim anlegen der Klasse HelloWorld die Möglichkeit einen „PrintStream“ zu konfigurieren. Damit sieht unser HelloWorld nun wie folgt aus:

import java.io.PrintStream;

public class HelloWorld {     

      private PrintStream out;

      public HelloWorld(PrintStream printStream) {

            this.out = printStream;

      }

      public void sayHelloWorld() {

            out.println("Hello World");

      }

      public static void main(String[] args) {

            new HelloWorld(System.out).sayHelloWorld();

      }

}

Gut so langsam haben wir nun ein HelloWorld das auch den Objektorientierten Anforderungen genügt. Stellt sich nun die Frage ob und wie wir dieses HelloWorld Testen können?

Ziel des Tests ist herauszufinden ob das Programm „HelloWorld“ auf dem Printsteam ausgibt. Hier für legen wir einen eigene Instance der PrintStream an. Siehe Test Programm unten:

public class HelloWorldTest {

      @Test

      public void testSayHelloWorld() throws Exception {

            PipedInputStream inputStream = new PipedInputStream();

            PipedOutputStream outputStream = new

PipedOutputStream(inputStream);

            PrintStream printStream = new PrintStream(outputStream);

            HelloWorld helloWorld = new HelloWorld(printStream);

            helloWorld.sayHelloWorld();

            BufferedReader reader =

                  new BufferedReader(new InputStreamReader(inputStream));           

            assertEquals("Hello World", reader.readLine());

      }

}

Endlich ist es geschafft da soll noch einer Sagen JUnit Tests sind trivial J Dieses Beispiel zeigt wie wichtiges es ist kein starkes coupling (feste Codierung) in seinem Code zu haben den sonst ist er nicht zu testen mittels Unit tests.

Sicherlich könnte man das Programm noch viel Simpler Testen es sollte ja nur beispielhaft gezeigt werden wie man mit JUnit Tests entwicklet und das man oft bei bestehenden Code ein Refactoring machen muss um Ihn überhaupt testen zu können.

 

Viel Spass beim Testen ...

 

PS: Wer sich etwas intensiver mit dem „HelloWorld“ befassen möchte sollte die folgende Seite besuchen http://www.ntecs.de/old-hp/uu9r/lang/html/lang.de.html oder Wiki ist auch ganz nett dazu http://de.wikipedia.org/wiki/Hallo-Welt-Programm

 

 


Pro-Pix Menu
Home
Blog
Tutorials
Links