Aufgabe

Wir brauchen eine Testumgebung und wollen uns komplett in der Eclipse Welt ohne SAPGUI bewegen. Da uns Reports nicht mehr zur Verfügung stehen, brauchen wir eine Alternative.
Diese Alternative für die moderne ABAP Cloud Welt heißt Konsolenanwendung.

In dieser Aufgabe wird zuerst eine solche einfache Konsolenanwendung erstellt. In einem zweiten Schritt wird diese dann noch optimiert, so dass wir danach sehr universell testen können.

Lernziele

  • Den Umgang mit Eclipse üben
  • Konsolenanwendungen kennenlernen
  • Eine ABAP Objects Klasse über den Eclipse Wizard anlegen
  • Erster Kontakt mit Interfaces und Vererbung
  • Perspektiven ABAP und Debug kennenlernen

Vorgehensweise

Achtung: Überall ## durch eigene Teilnehmernummer ersetzen.

ABAP Klasse anlegen

  • Eclipse öffnen
  • Paket $TMP auswählen
  • Über das Kontextmenü New - ABAP Class auswählen
  • Wizard wie folgt verwenden:
    • Name: ZCL_BC_AOO_##_TESTTOOL_SAP
    • Description: Brandeis Training: ABAP Objects - Testtool SAP Standard ##
    • Interface: IF_OO_ADT_CLASSRUN über die Suchhilfe zuordnen
    • Wizard abschließen

Interface implementieren

  • im Code wurde bereits eine Methode if_oo_adt_classrun~main angelegt
  • hier den Code out->write( |Hallo ABAP Objects!| ). einbauen
  • Mit STRG-F3 aktivieren
  • mit F9 die Konsolenanwendung starten
  • Es sollte sich die Sicht Console öffnen und Hallo ABAP Objects! anzeigen

Debugger testen

  • Breakpoint am Befehl out->write setzen (Doppelklick auf Rand oder STRG-Umsch-B)
  • noch mal mit F9 starten
  • es öffnet sich die Perspektive Debug
  • am rechten Rand werden die Variablen des Debuggers angezeigt
  • hier darauf achten, dass die Variable ME ein {O:101*\CLASS=ZCL* anzeigt. Das ist ein Hinweis auf eine Objektinstanz!
  • Mit den Tasten F5-F8 den Debugger bedienen - F8 für Programm ohne Unterbrechung fortsetzen
  • Nach dem Ende die Perspektive ABAP wählen

Eine weitere Konsolenanwendung erstellen für unsere späteren Übungen

  • Klasse ZCL_BC_AOO_##_TESTTOOL_SAP auswählen
  • Im Kontextmenü Duplicate auswählen
  • Den Namen ändern in ZCL_BC_AOO_##_TESTTOOL_BEC (BEC für Brandeis Consulting)
  • Wizard abschließen - die neue Klasse erscheint im Arbeitsbereich
  • View Properties öffnen und unter General den Beschreibungstext ändern: SAP Standard ## durch BEC Experts ## ersetzen
  • Im oberen Abschnitt DEFINITION hinter CREATE PUBLIC vor dem Punkt INHERITING FROM zcl_bc_aoo_testtool_helper einfügen (Hinweis: hiermit wird eine Vererbung definiert)
  • In der PUBLIC SECTION hinter der Zeile INTERFEACES ... eine neue Zeile METHODS test_hello. einfügen (Hinweis: hiermit wird eine neue public sichtbare Methode definiert)
  • Die Fehlermeldung ignorieren und auf test_hello die Tastenkombination STRG-1 für Quickfix aufrufen.
  • Es erscheint eine Option für das Anlegen einer Implementierung für die neue Methode test_hello. Aufrufen.
  • Die Implementierung der Methode test_hello mit dem Inhalt der bisherigen Interface-Methode if_oo_adt_classrun~main auffüllen
  • Den Code in der Methode if_oo_adt_classrun~main mit dem folgendem Code ersetzen:
Code für if_oo_adt_classrun~main
  METHOD if_oo_adt_classrun~main.
*   set context
    me->out                 = out.               " store out for others
    me->attendee_id         = '99'.         " <-- Enter Your Number
    me->virtual_player      = 3.             " virtual players

*   extra context (change with debugger)
    data(lv_method) = |test_hello|.          "<-- change with debugger

*   open tests
    test_start(  ).
    test_info(  ).

*   own test
    test_method( lv_method ).
    "test_hello(  ).                        "<-- uncomment and add own methods

*   close tests
    test_end(  ).
  ENDMETHOD.
  • Pretty-Printer mit Strg-Umsch-F ausführen
  • Aktivieren mit Strg-F3

Debugger testen und Variable ändern

  • Danach erneut Breakpoint setzen: z.B. auf test_start( ) und mit F9 das Programm und damit auch den Debugger ausführen
  • auf Variable lv_method im Debugger Variables View gehen und Change Value auswählen
  • diesen Wert ändern: z.B. test_hello2 und bestätigen
  • Der Wert hat sich auch im View Variables geändert
  • Programm fortsetzen mit F8
  • es erscheint eine Fehlermeldung im View Console
  • Hintergrund: damit können wir später neue Methoden testen ohne ein neues Testtool bauen zu müssen

Vorgehensweise für neue Methode

  • im Bereich DEFINITION die Zeile für Methode test_hello kopieren, dahinter wieder einfügen und einen neuen Namen vergeben: z.B. test_hello2
  • im Bereich IMPLEMENTATION die Methode test_hello komplett kopieren und dahinter wieder einfügen
  • den Namen der Methode ändern auf den Namen, der zuvor gewählt wurde
  • den Code entsprechend den Übungen ersetzen - zum Testen einfach gegen out->write( |Hallo ABAP Objects 2!| ). ersetzen
  • sichern und aktivieren
  • Danach den Test aus 8 wiederholen
  • Die Fehlermeldung sollte jetzt nicht mehr auftreten und eine andere Meldung in der Console erscheinen

Glückwunsch!

Wir haben erfolgreich die Grundlagen geschaffen, um unsere weiteren Übungen einfach testen zu können. So nebenbei hatten wir bereits Kontakt mit ein paar grundlegenden ABAP Objects Funktionen und ein bisschen Eclipse geübt.

Lösung

Lösung Testtool SAP Standard
CLASS zcl_bc_aoo_##_testtool_sap DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC .

  PUBLIC SECTION.
    INTERFACES if_oo_adt_classrun .
  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.

CLASS zcl_bc_aoo_##_testtool_sap IMPLEMENTATION.
  METHOD if_oo_adt_classrun~main.
    out->write( |Hallo ABAP Objects!| ).
  ENDMETHOD.
ENDCLASS.
Lösung Testtool BEC Experts
CLASS zcl_bc_aoo_##_testtool_bec DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC
  INHERITING FROM zcl_bc_aoo_testtool_helper.

  PUBLIC SECTION.

    INTERFACES if_oo_adt_classrun .
    METHODS test_hello.
    METHODS test_hello2.
  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.

CLASS zcl_bc_aoo_##_testtool_bec IMPLEMENTATION.

  METHOD if_oo_adt_classrun~main.
*   set context
    me->out                 = out.           " store out for others
    me->attendee_id         = '99'.          " <-- Enter Your Number
    me->virtual_player      = 3.             " virtual players 


*   extra context (change with debugger)
    DATA(lv_method) = |test_hello|.          "<-- change with debugger

*   open tests
    test_start(  ).
    test_info(  ).

*   own test
    test_method( lv_method ).
    "test_hello(  ).                        "<-- uncomment and add own methods

*   close tests
    test_end(  ).
  ENDMETHOD.

  METHOD test_hello.
    out->write( |Hallo ABAP Objects!| ).
  ENDMETHOD.

  METHOD test_hello2.
    out->write( |Hallo ABAP Objects 2!| ).
  ENDMETHOD.

ENDCLASS.

Zusatzaufgaben

Wer zu schnell fertig ist, der kann mit dem Debugger mal in die geerbten Methoden abtauchen und den Umgang mit dem Debugger und den Funktionstasten F5-F8 üben

Weitere Hinweise

Das folgende SAP Learning beschreibt die Anlage von Eclipse Konsolenanwendungen

Der Expertenmodus kommt natürlich durch die Vererbung aus Klasse ZCL_BC_AOO_TESTTOOL_HELPER. Hier kann man sich vielleicht einige Anregungen für eigene wiederverwendbare Tools holen.