Erster Test

Für jede Regel ein Unit-Test

Zum Testen wurde für jede Regel der Entscheidungstabelle ein Unit-Test erzeugt.

Damit haben wir auch gleich schon eine erste Testmetrik: 100% Regel-Überdeckung.

et rechnungsbetrag 01

Wir verwenden für Unit-Tests gerne Cucumber. Die Generierung von Gherkin-Feature-Dateien aus Entscheidungstabellen wird im Abschnitt Testfallgenerierung erläutert.

Die Feature-Datei (Gherkin), die in diesem Beispiel bei der Ausführung der Unit-Tests verwendet wird:
# Diese Datei wurde erzeugt durch LF-ET 2.4.1 (260219a)
#
# Entscheidungstabelle: \src\main\resources\lfet\demo\Rechnungsbetrag.lfet
# Regelauswahl und Regelsortierung: Alle Regeln, Standardsortierung
# Testfälle mit Fehlern: 0
# Testfälle mit Warnungen: 0

# language: de

Funktion: Rechnungsbetrag berechnen

  @recommended
  Szenario: 0001 Rechnungsbetrag
  Rechnungsbetrag
  R01 : B01 Bestellwert = < 20,00
    Angenommen das Porto beträgt EUR 4,97
    Wenn       der Wert der Bestellung EUR 18,00 beträgt
    *          der Bestellvorgang abgeschlossen wurde
    Dann       wird kein Rabatt berücksichtigt
    *          wird ein Porto in Höhe von EUR 4,97 berechnet
    *          ergibt sich ein Gesamtbetrag in Höhe von EUR 22,97

  @recommended
  Szenario: 0002 Rechnungsbetrag
  Rechnungsbetrag
  R02 : B01 Bestellwert = 20,00 - 75,00 ; B02 Rabatt = >0 ; B03 Rabattvariante = %
    Angenommen das Porto beträgt EUR 8,04
    Wenn       der Wert der Bestellung EUR 40,00 beträgt
    *          ein Rabattcode mit einem Wert in Höhe von 5 % eingeben wurde
    *          der Bestellvorgang abgeschlossen wurde
    Dann       wird ein Rabatt in Höhe von EUR 2,00 berücksichtigt
    *          wird ein Porto in Höhe von EUR 8,04 berechnet
    *          ergibt sich ein Gesamtbetrag in Höhe von EUR 46,04

  @recommended
  Szenario: 0003 Rechnungsbetrag
  Rechnungsbetrag
  R03 : B01 Bestellwert = 20,00 - 75,00 ; B02 Rabatt = >0 ; B03 Rabattvariante = EUR ; B04 Rabatt < Bestellwert = J
    Angenommen das Porto beträgt EUR 8,58
    Wenn       der Wert der Bestellung EUR 74,99 beträgt
    *          ein Rabattcode mit einem Wert in Höhe von EUR 37,50 eingeben wurde
    *          der Bestellvorgang abgeschlossen wurde
    Dann       wird ein Rabatt in Höhe von EUR 37,50 berücksichtigt
    *          wird ein Porto in Höhe von EUR 8,58 berechnet
    *          ergibt sich ein Gesamtbetrag in Höhe von EUR 46,07

  @recommended
  Szenario: 0004 Rechnungsbetrag
  Rechnungsbetrag
  R04 : B01 Bestellwert = 20,00 - 75,00 ; B02 Rabatt = >0 ; B03 Rabattvariante = EUR ; B04 Rabatt < Bestellwert = N
    Angenommen das Porto beträgt EUR 4,56
    Wenn       der Wert der Bestellung EUR 60,00 beträgt
    *          ein Rabattcode mit einem Wert in Höhe von EUR 60,00 eingeben wurde
    *          der Wert des Rabattes größer oder gleich dem Bestellwert ist
    *          der Bestellvorgang abgeschlossen wurde
    Dann       wird kein Rabatt berücksichtigt
    *          wird ein Porto in Höhe von EUR 4,56 berechnet
    *          ergibt sich ein Gesamtbetrag in Höhe von EUR 64,56

  @recommended
  Szenario: 0005 Rechnungsbetrag
  Rechnungsbetrag
  R05 : B01 Bestellwert = 20,00 - 75,00 ; B02 Rabatt = ohne
    Angenommen das Porto beträgt EUR 3,11
    Wenn       der Wert der Bestellung EUR 50,00 beträgt
    *          kein Rabattcode angegeben wurde
    *          der Bestellvorgang abgeschlossen wurde
    Dann       wird kein Rabatt berücksichtigt
    *          wird ein Porto in Höhe von EUR 3,11 berechnet
    *          ergibt sich ein Gesamtbetrag in Höhe von EUR 53,11

  @recommended
  Szenario: 0006 Rechnungsbetrag
  Rechnungsbetrag
  R06 : B01 Bestellwert = > 75,00 ; B02 Rabatt = >0
    Angenommen das Porto beträgt EUR 8,98
    Wenn       der Wert der Bestellung EUR 119,99 beträgt
    *          ein Rabattcode mit einem Wert in Höhe von EUR 20,00 eingeben wurde
    *          der Bestellvorgang abgeschlossen wurde
    Dann       wird ein Rabatt in Höhe von EUR 20,00 berücksichtigt
    Aber       es wird kein Porto berechnet
    Dann       ergibt sich ein Gesamtbetrag in Höhe von EUR 99,99

  @recommended
  Szenario: 0007 Rechnungsbetrag
  Rechnungsbetrag
  R07 : B01 Bestellwert = > 75,00 ; B02 Rabatt = ohne
    Angenommen das Porto beträgt EUR 9,66
    Wenn       der Wert der Bestellung EUR 90,00 beträgt
    *          kein Rabattcode angegeben wurde
    *          der Bestellvorgang abgeschlossen wurde
    Dann       wird kein Rabatt berücksichtigt
    Aber       es wird kein Porto berechnet
    Dann       ergibt sich ein Gesamtbetrag in Höhe von EUR 90,00

### end of generated test cases ###

Ergebnis

Nach Ausführung des Tests, z.B. mit dem Maven Befehl mvn clean verify, sieht das Ergebnis erfreulich aus: BUILD SUCCESS.

Durch den Standard-Tracecode in den Regel­modulen sieht man in der Konsolausgabe 'out of the box':

  • den Namen der Entscheidungstabelle

  • den Zeitstempel der Programmgenerierung

  • die Anzahl der Regeln in der Entscheidungstabelle

  • die Nummer der Regel, die ausgeführt wurde

  • in unserem Beispiel zusätzlich auch noch den Zustand des Modells VOR Ausführung der Regel

Die Konsolausgabe der Testausführung:
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running lfet.demo.RechnungsbetragTest
Rechnungsbetrag, 20260224.112051, 7, 1, Rechnungsbetrag_model(bestellwert=18.00, rabatt=0.00, rabattTyp=null, porto=4.97, rechnungPorto=0, rechnungRabatt=0, rechnungBetrag=0)
Rechnungsbetrag, 20260224.112051, 7, 2, Rechnungsbetrag_model(bestellwert=40.00, rabatt=5.00, rabattTyp=%, porto=8.04, rechnungPorto=0, rechnungRabatt=0, rechnungBetrag=0)
Rechnungsbetrag, 20260224.112051, 7, 3, Rechnungsbetrag_model(bestellwert=74.99, rabatt=37.50, rabattTyp=EUR, porto=8.58, rechnungPorto=0, rechnungRabatt=0, rechnungBetrag=0)
Rechnungsbetrag, 20260224.112051, 7, 4, Rechnungsbetrag_model(bestellwert=60.00, rabatt=60.00, rabattTyp=EUR, porto=4.56, rechnungPorto=0, rechnungRabatt=0, rechnungBetrag=0)
Rechnungsbetrag, 20260224.112051, 7, 5, Rechnungsbetrag_model(bestellwert=50.00, rabatt=0.00, rabattTyp=null, porto=3.11, rechnungPorto=0, rechnungRabatt=0, rechnungBetrag=0)
Rechnungsbetrag, 20260224.112051, 7, 6, Rechnungsbetrag_model(bestellwert=119.99, rabatt=20.00, rabattTyp=EUR, porto=8.98, rechnungPorto=0, rechnungRabatt=0, rechnungBetrag=0)
Rechnungsbetrag, 20260224.112051, 7, 7, Rechnungsbetrag_model(bestellwert=90.00, rabatt=0.00, rabattTyp=null, porto=9.66, rechnungPorto=0, rechnungRabatt=0, rechnungBetrag=0)
[INFO]
[INFO] Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.050 s -- in lfet.demo.RechnungsbetragTest
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

vertical space 05px