Ansicht
Dokumentation

ABAPINTERFACES_PARTIALLY - INTERFACES PARTIALLY

ABAPINTERFACES_PARTIALLY - INTERFACES PARTIALLY

Vendor Master (General Section)   PERFORM Short Reference  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

INTERFACES, PARTIALLY IMPLEMENTED

Kurzreferenz



INTERFACES intf
  PARTIALLY IMPLEMENTED
  ...

Wirkung

Der Zusatz PARTIALLY IMPLEMENTED zur Anweisung INTERFACES zur Implementierung von Interfaces in Klassen ist nur in Testklassen möglich. Er verhindert den Fehler bzw. die Warnung von der Syntaxprüfung, wenn nicht alle konkreten nicht-optionalen Methoden des Interfaces in der Testklasse implementiert sind. Der Zusatz muss vor den Zusätzen aufgeführt werden, die Attribute oder Methoden aufzählen.

Wenn während eines Tests eine Interfacemethode aufgerufen wird, die nicht implementiert ist, kommt es zu einer Ausnahme der Klasse CX_SY_DYN_CALL_ILLEGAL_METHOD.

Hinweis

Der Zusatz ist insbesondere dann nützlich, wenn Klassen, die als Testattrappen dienen, Interfaces implementieren, von denen aber nicht alle Methoden vom zu testenden Code gerufen werden. Ohne den Zusatz müssten alle nicht benötigten Methoden leer implementiert und mit einem Pragma needed versehen werden, da eine leere Methodenimplementierung zu einer Warnung von der erweiterten Programmprüfung führt.

Beispiel

Als Beispiel für produktiven Code dient die unter Aufruf eines HTTP-Services vorgestellte Klasse CL_HTTP_EXT_SERVICE_DEMO. Diese Klasse demonstriert die Funktion eines einfachen HTTP-Services. Bei normaler Verwendung des Services wird die Methode IF_HTTP_EXTENSION~HANDLE_REQUEST vom ICF aufgerufen. Um die Klasse unabhängig vom ICF zu testen, sind in ihrem Test-Include lokale Klassen als Testattrappen für die Klassen des ICF deklariert, welche die genannten Interfaces implementieren:

CLASS mock_server DEFINITION FOR TESTING FINAL.
  PUBLIC SECTION.
    INTERFACES if_http_server PARTIALLY IMPLEMENTED.
ENDCLASS.

CLASS mock_server IMPLEMENTATION.
ENDCLASS.

CLASS mock_request DEFINITION FOR TESTING FINAL.
  PUBLIC SECTION.
    INTERFACES if_http_request PARTIALLY IMPLEMENTED.
ENDCLASS.

CLASS mock_request IMPLEMENTATION.
  METHOD if_http_request~get_form_field.
    value = SWITCH spfli-carrid( name WHEN 'carrid' THEN 'LH'
                                      ELSE space ) ##no_text.
  ENDMETHOD.
ENDCLASS.

CLASS mock_response DEFINITION FOR TESTING FINAL.
  PUBLIC SECTION.
    INTERFACES if_http_response PARTIALLY IMPLEMENTED.
    DATA output TYPE string.
ENDCLASS.

CLASS mock_response IMPLEMENTATION.
  METHOD if_http_response~set_cdata.
    me->output = data.
  ENDMETHOD.
ENDCLASS.

Dabei werden nur die Interfacemethoden implementiert, die für die Testausführung notwendig sind. Die Interfaces haben sehr viele weitere Methoden. Diese müssen wegen des Zusatzes PARTIALLY IMPLEMENTED aber nicht leer implementiert werden.

Die eigentliche Testklasse sieht wie folgt aus:

CLASS test_http_service DEFINITION FOR TESTING
                        DURATION SHORT
                        RISK LEVEL HARMLESS
                        FINAL.
  PRIVATE SECTION.
    DATA mock_request  TYPE REF TO mock_request.
    DATA mock_response TYPE REF TO mock_response.
    DATA mock_server   TYPE REF TO mock_server.
    DATA handler  TYPE REF TO cl_http_ext_service_demo.
    METHODS test_service FOR TESTING.
ENDCLASS.

CLASS test_http_service IMPLEMENTATION.
  METHOD test_service.
    CREATE OBJECT mock_request.
    CREATE OBJECT mock_response.
    CREATE OBJECT mock_server.
    CREATE OBJECT handler.
    mock_server->if_http_server~request  = mock_request.
    mock_server->if_http_server~response = mock_response.
    handler->if_http_extension~handle_request( mock_server ).
    IF mock_response->output NS `meta name="Output" content="Data">`.
      cl_abap_unit_assert=>fail( msg = `Wrong output data` ).
    ENDIF.
  ENDMETHOD.
ENDCLASS.

In der Testmethode wird das ICF über direkte Erzeugung von Objekten der Testattrappen simuliert. Die REQUEST-Testattrappe simuliert das Formularfeld. Die RESPONSE-Testattrappe enthält das Ergebnis, welches nach Aufruf der zu testenden Methode HANDLER überprüft wird.






General Data in Customer Master   SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 6602 Date: 20240424 Time: 221722     sap01-206 ( 72 ms )