ABAP Unit

Übersicht über Unit Tests

(C) Brandeis Consulting.

Was sind Unit Tests

Es gibt unterschiedliche Definitionen - wie so oft sind das auch ein bisschen Glaubensrichtungen.

Klassische Definition

Ein Unit Test ist ein Stück Code (meist eine Methode), das ein anderes Stück Code aufruft und anschließend die Richtigkeit einer oder mehrerer Annahmen überprüft. Falls sich die Annahmen als falsch erweisen, ist der Unit Test fehlgeschlagen. Eine Unit ist eine Methode oder Funktion.

Definition von Roy Osherove

Ein Unit Test ist ein automatisiertes Stück Code, das eine zu testende Unit of Work aufruft und dann einige Annahmen über ein einzelnes Endresultat dieser Unit prüft. Ein Unit Test wird fast immer mithilfe eines Unit-Testing-Frameworks erstellt. Er kann einfach geschrieben und schnell ausgeführt werden. Er ist vertrauenswürdig , lesbar und wartbar. Seine Ergebnisse sind konsistent, solange der Produktionscode nicht geändert wird.

(C) Brandeis Consulting.

Abgrenzung zum Integration Test

Integration Testing bedeutet, dass eine Unit of Work getestet wird, ohne die volle Kontrolle über sie oder eine oder mehrere ihrer realen Abhängigkeiten wie Zeit, Netzwerk, Datenbank, Threads, Zufallszahlengenerator usw. zu haben.

Unterschied zum Unit Test

Die Abhängigkeiten sind vorhanden. Nicht alles ist unter Kontrolle. Integrationstests sind oft größer und aufwändiger, um das gesamte Szenario zu testen.
Beispiel: ECATT

Vorteil

Es wird ein System als Ganzes getestet, also auch das Zusammenspiel der Komponenten.

Nachteil

  • Ein Fehler kann viele Ursachen haben
  • Aufwändiger zu erstellen
(C) Brandeis Consulting.

Jenseits von Definitionen

  • Unit Tests testen kleine Einheiten, normalerweise einzelne Methoden
  • Die Tests lassen sich automatisieren, z.B. durch einen vollständigen nächtlichen Testlauf
  • Nach jeder Änderung am Code sollen die Tests durchgeführt werden. Automatisiert durch Routine...
  • Die Tests sollen nach Möglichkeit ohne Abhängigkeiten zu anderen Komponenten ablaufen
  • Die Clean Code Prinzipien erleichtern die Erstellung von UnitTests. Auch der Test Code wird nach diesen Prinzipien erstellt
(C) Brandeis Consulting.

Was soll getestet werden?

Definition Unit Of Work

Eine Unit of Work ist die Summe aller Aktionen, die zwischen dem Aufruf einer öffentlichen Methode innerhalb eines Systems und einem erkennbaren Endresultat beim Test dieses Systems stattfinden. Ein erkennbares Endresultat kann ausschließlich durch die öffentlichen APIs und das öffentliche Verhalten beobachtet werden, ohne den internen Zustand des Systems zu betrachten. Ein Endresultat ist jedes der folgenden:

  1. Die aufgerufene öffentliche Methode gibt einen oder mehrere Werte zurück
  2. Es gibt eine erkennbare Änderung im Zustand oder Verhalten des Systems vor und nach dem Aufruf, die ohne das Abfragen eines privaten Zustands bestimmt werden kann. (Beispiel: Ein zuvor nicht existierender Benutzer kann sich am System anmelden oder die Eigenschaften des Systems, falls es sich dabei um einen endlichen Automaten handelt, ändern sich.)
  3. Es gibt einen Aufruf zu einem Fremdsystem, über das der Test keine Kontrolle hat und dieses Fremdsystem gibt entweder keinen Wert zurück oder der Rückgabewert wird ignoriert. (Beispiel: der Aufruf eines Logging-Systems, das nicht von Ihnen geschrieben wurde und zu dem Sie keinen Quellcode haben.)
Aus "The Art of Unit Testing", angepasst auf ABAP
(C) Brandeis Consulting.

Begriffe

Code Under Test (CUT)

Mit dem Kürzel CUT bezeichnet man das zu testenden Objekt. Diese Abkürzung heißt, je nach Kontext entweder Code under Test oder Class under Test oder sogar CDS under Test.

Diese Abkürzung wird auch häufig in Testklassen verwendet.

Depend-on Component (DOC)

Objekte, von denen der CUT abhängt, nennen wir Depend-on Components (DOC). Damit wir wirklich nur unser CUT testen und nicht die DOC, werden wir diese während des Tests später ersetzen.

(C) Brandeis Consulting.

Was macht gute Tests aus

  • Die Durchführung ist schnell
  • Es werden alle Aspekte abgefragt:
    • Happy Path: Die gewünschte Funktion
    • Fehlersituationen testen: Leere Parameter, negative Eingaben, etc.
  • Alle Zweige innerhalb des CUT sollen getestet worden sein
  • Der Test testet nur echten Code
  • Sind wiederholbar
  • Sind unabhängig von anderen Tests
(C) Brandeis Consulting.

Testpyramide (1/2)

Die Testpyramide (engl. Test Automation Pyramid) ist ein von Mike Cohn entwickeltes Konzept zum Testen von Anwendungen: Während Unit-Tests häufig und schnell erfolgen sollen, sollen komplexere und langsamere Integrations- und Systemtests seltener und weniger häufig durchgeführt werden.

Wikipedia: "Testpyramide", https://de.wikipedia.org/wiki/Testpyramide

(C) Brandeis Consulting.

Testypramide (2/2)

Es gibt unterschiedliche Anzahl und Ausprägungen der Ebenen, siehe Abbildung auf der vorherigen Folie.

Die gebräuchlichste Version:

  • Systemtests
  • Integrationstests
  • Unit Tests

Testpyramide nach Cohn[1]
Das Konzept systematisiert Testverfahren nach Schnelligkeit und verursachten Kosten. Unit Tests sind einfach, billig und schnell auszuführen.
(C) Brandeis Consulting.

Was bringt das Testen

Interessanter Weise bringen Unit-Tests neben dem offensichtlichen Vorteil von immer wieder automatisiert abspielbaren Tests auch noch einige weitere Vorteile:

Bessere (testbare) Architektur

Wenn man schon beim Entwickeln testet, wird man zu einem modularen Ansatz gezwungen.

Nachdenken über Grenzfälle

Wenn man auf der Suche nach sinnvollen Tests ist, dann ist die Abweichung vom Happy-Path eine beliebte Option. Bei der "normalen" Entwicklung kommt dieser Bereich traditionell zu kurz.

Überlegung bei der Testerstellung

Was kann bei dieser Methode alles falsch laufen und wie muss die Methode dann korrekt auf den Fehler reagieren?

Typische Situationen:

  • Leere Parameter
  • negative Werte
  • Besonders Lange oder absurde Eingaben
(C) Brandeis Consulting.

Tips

  • Heute anfangen
  • Man braucht Erfahrung für gute Tests. Die bekommt man nur durch selber machen. Darum einfach für jede öffentliche Methode mindestens zwei Test schreiben:
    • Happy Path
    • Fehlersituation
  • Testen sollte zur Gewohnheit werden
  • Besser ein einfacher Smoke-Test als kein Test

ABAPConf 2023: Smoke testing your RAP: Schnelleinstieg in das Testen von RAP-Services, Sascha Wächter

(C) Brandeis Consulting.