
ABAP Cloud - Test Daten Container
Test Daten Container sind unter ABAP Cloud nicht freigegeben, wie also auf generische Testdaten zugreifen können? Hier ein Vorschlag für ein einfaches Framework.
Inhaltsverzeichnis
In diesem Artikel wollen wir dir das Open Source Projekt für die Test Daten Container vorstellen. Dabei werden wir auf den Aufbau und die Verwendung eingehen und dir weitere Möglichkeiten zeigen. Die Idee entstand in einer Diskussion mit Frank Engert.
Einleitung
Test Daten Container werden zum Testen im SAP System verwendet. Damit kannst du ganz einfach generische Daten ablegen und pflegen, ohne den eigentlichen Unit Test später anpassen zu müssen. Möchtest du etwas über die klassische Verwendung erfahren, dann gibt es hier einen Artikel in der SAP Community. Allerdings wurden die Container nicht für ABAP Cloud freigegeben, da es auch kein passendes Frontend für die Pflege der Daten gibt. Aktuell müssten damit alle Testdaten am Testfall gepflegt werden, was es etwas unhandlich und unübersichtlich macht.
Architektur
Die Architektur der Komponente ist relativ einfach gehalten und wir verwenden einige Standards wieder. Die Idee ist, einen externen Editor zu verwenden, um die Daten in strukturierten Formaten zu pflegen und die Formatierungsoptionen genau dieser Editoren zu verwenden. Damit übernimmt zum Beispiel der JSON Editor von GitHub die Validierung und Formatierung des Inhalts, ähnlich der Pflege in der SAP GUI. Im Anschluss können wir die Datei aus GitHub über das HTTP Protokoll beziehen und in unseren Tests verwenden. Dabei werden aktuell die Formate JSON, abapXML und RAW unterstützt.
Hinweis: Aktuell wird nur ABAP Cloud in der Public Cloud unterstützt, da wir den neuen HTTP Client verwenden, um eine Verbindung ins Internet aufzubauen.
Pflege
Die Pflege der Daten geschieht außerhalb von ABAP. In diesem Beispiel verwenden wir die integrierte IDE in GitHub, um die Daten zu pflegen. Im Beispiel fehlt zum Beispiel ein Komma, der Editor markiert die entsprechende Stelle, sodass wir Unterstützung bei der Pflege der Daten erhalten und ein korrektes Format liefern.
Verwendung
In diesem Kapitel schauen wir uns die Verwendung für Unit Tests und innerhalb der Logik an. Um die Daten zu Lesen verwenden wir die
Konfiguration
Eine Konfiguration bildet einen Zugriffsweg und die Leseroutine für diesen ab. Aktuell gibt es nur die Konfiguration für GitHub, diese findest du in der Klasse ZCL_TDC_GITHUB_CONFIG. Eine neue Konfiguration erzeugen wir, in dem wir den Pfad zur Datei an den Konstruktor übergeben.
DATA(configuration) = NEW zcl_tdc_github_config( test_file_path ).
Für das Laden der Datei wird der Pfad zum RAW File benötigt. Wenn du dir die Datei in GitHub anschaust, gibt es in der rechten Ecke einen Button, damit wird die Datei in der passenden Ansicht geladen. Diesen Pfad verwenden wir als Quelle für die Konfiguration.
Container
Im nächsten Schritt erzeugen wir uns einen Container, um an die Datei kommen zu können. Dazu übergeben wir die Konfiguration an die Methode der Factory und erhalten den Container zur Verwendung zurück.
DATA(container) = zcl_test_container_factory=>create( configuration ).
Der Container bietet uns verschiedene Methoden, um an die Daten zu kommen. Es gibt zwei Methoden um den Inhalt der Datei im RAW Format zu erhalten, einmal als String oder als XString. Über die anderen zwei Methoden können wir unsere Tabelle oder Struktur befüllen lassen, hier sind entsprechende Parser in den Methoden inkludiert.
Daten
Wollen wir nun die Daten laden, dann benötigen wir eine Struktur bzw. Tabelle, auf die wir die Daten mappen können. Dazu definieren wir uns einen lokalen Typen, der das gleiche Format wie die JSON-Datei hat.
TYPES: BEGIN OF github_test,
text TYPE string,
number TYPE i,
boolean TYPE abap_bool,
END OF github_test.
TYPES github_tests TYPE STANDARD TABLE OF github_test WITH EMPTY KEY.
Um nun die Daten zu lesen und in die Struktur zu befüllen, müssen wir nur die entsprechende Methode aufrufen. In diesem Fall lesen wir die Daten als JSON. Im Hintergrund wird der HTTP Client genutzt, um die Daten Live von GitHub zu laden.
container->get_json_data( CHANGING generic = result ).
Beispiele
Weitere Beispiele zur Verwendung es Test Daten Container findest du in den Unit Tests der Klasse ZCL_TEST_CONTAINER. Dort werden alle Methoden mit Beispielen aus dem Repository verwendet und du findest weitere Informationen zur Anlage der Struktur
GitHub
Das komplette Open Source Projekt für die Test Daten Container findest du bei uns im GitHub Repository. Das Projekt kannst du frei verwenden.
Fazit
Das kleine Framework kannst du nutzen, um komplexe Daten über eine externe Plattform zu verwalten und die Kapazitäten anderer Editoren zur Pflege zu verwenden. Grundsätzlich hast du mit der Komponente aber eine Abhängigkeit, sollte zum Beispiel das Internet mal nicht funktionieren. Am Ende kannst du den Container aber auch verwenden, um Daten für die Verarbeitung zur Verfügung zu stellen, da das Framework nicht nur auf Unit Tests eingeschränkt ist.