Java Videotraining Werbung

Videotraining Spring 3 Boot Werbung

1. Testen mit JUnit

Voraussetzungen

  • JUnit und AssertJ im Klassenpfad

  • Veständnis für das Test-driven-Development

  • JUnit 5

  • AssertJ

Verwendete Datentypen in diesem Kapitel:

1.1. JUnit

1.1.1. Schon wieder gebrochen ⭐

Apache Commons Lang (https://commons.apache.org/proper/commons-lang/) ist eine Bibliothek von Open-Source-Java-Komponenten, die von der Apache Software Foundation entwickelt wurde. Sie enthält Klassen und Methoden, die häufig verwendete Funktionalitäten bereitstellen, die nicht Teil des Java Standard Edition sind.

Aufgabe:

  • Lade commons-lang3-3.13.0-src.zip. Packe das Archiv aus. Importiere es als Maven-Projekt in die IDE.

  • Lasse in der IDE alle Testfälle laufen. Lasse über Maven alle Testfälle laufen, dazu kann man mvn test verwenden. Es kann Fehler geben, die können ignoriert werden.

  • Bekomme über die Javadoc Fraction Javadoc eine Eindruck der Klasse Fraction.java. Überlege, wie Testfälle aussehen müssten.

  • Wirf einen Blick auf die Implementierung der Testklasse FractionTest.java. Welche JUnit-Techniken sind wiederzuerkennen?

1.2. AssertJ

AssertJ (https://assertj.github.io/doc/) ist eine Bibliothek für Fluent Assertions für Java. Mit AssertJ lassen sich prägnante, lesbare Tests schreiben, indem sie Assertionen auf eine intuitiv verständliche Art und Weise ausdrücken. Schlägt ein Test fehl, erzeugt AssertJ informative Fehlermeldungen.

1.2.1. Einstieg in AssertJ ⭐

Aufgabe:

1.2.2. Test-first mit Geldbeträgen ⭐

Aufgabe:

  1. Lege eine neue Klasse com.tutego.money.MonetaryAmount an. Sie soll einen Geldbetrag auf zwei Stellen hinter dem Komma speichern. Das Objekt ist immutable und muss thread-safe und auch Serializable sein. Nutze folgende unvollständige, aber compilierbare Vorlage:

    public class MonetaryAmount {
    
     private MonetaryAmount() { }
    
     // Erzeugen von immutable MonetaryAmount-Objekten durch Fabrikmethode
     public static MonetaryAmount of( double value ) { return null; }
    
     // liefert den Wert
     public double value() { return 0; }
     public String toString() { return ""; }
    
     // MonetaryAmount-Objekte soll man mit equals(Object o) vergleichen können
     public boolean equals( Object o ) { return false; }
    
     //
     public MonetaryAmount add( MonetaryAmount value ) { return null; }
     public MonetaryAmount subtract( MonetaryAmount value ) { return null; }
    }
  2. Schreibe ein kurzes Javadoc. Negative Geldbeträge darf es nicht geben und müssen über eine Ausnahme abgeblockt werden. 0 ist erlaubt. Das toString-Format: keine Tauserdertrenner, immer zwei Nachkommastellen, Dezimaltrenner immer der Punkt.

  3. Fehlt eine Methode, die man aus Symmetriegründen immer haben sollte?

  4. Lege eine neue Klasse com.tutego.money.MonetaryAmountTest für den Testfall an. Wohin kommt die Klasse? Unterstützt uns die IDE?

  5. Implementiere passende Testmethoden. Was müssen wir testen?

  6. Implementiere alle Methoden der Klasse MonetaryAmount.

  7. Sind unsere Datentypen klug gewählt? Müssen wir eine Wahl korrigieren?