ABAP Unit

Teil der Programmiersprache ABAP

ABAP Unit ist die xUnit-Umsetzung für die Programmiersprache ABAP. ABAP Unit ist dabei direkt in die Sprache ABAP und die Entwicklungsumgebungen SE80 sowie Eclipse integriert.

Die Modultests sind als spezielle Testklassen modelliert. Eine solche Testklasse hat i. d. R. eine oder mehrere Testmethoden und optional spezielle Methoden zum Auf- und Abbau des Testumfeldes. Die Testklassen können als lokale Klassen direkt im zu testenden Programm enthalten sein. Dadurch kann es nie zu abweichenden Versionen zwischen Modultest und getester Funktionalität kommen. Durch die Sprachintegration ist dabei eine strikte Trennung zwischen Produktiv- und Test-Code sichergestellt. So können die Testklassen den Produktiv-Code ausführen, aber nicht umgekehrt.

Es ist möglich, die Modultests direkt aus den Editoren und dem Repository Browser der SE80 auszuführen (Ctrl+Shift+F10). In neueren Versionen (>= Netweaver 7.02) gibt es einen speziellen ABAP Unit Browser und eine Anbindung an die Abdeckungs- oder Coverage-Ermittlung. Mit Hilfe des Werkzeuges Code Inspector kann man viele Modultests auf einmal ausführen, z. B. alle Modultests, die in Programmen eines Paketes enthalten sind. Es gibt in ABAP Unit keine Möglichkeit, einzelne Modultests programmatisch zu Test-Suites zusammenzufassen. Als Workaround können jedoch Selektionsvarianten zum Programm RS_AUCV_RUNNER mit unterschiedlichen zu testenden Paketen, Klassen, Funktionsgruppen und Programmen angelegt werden.

Ab ABAP 7.40 steht mit der Klasse CL_ABAP_TESTDOUBLE ein syntaktisch an EasyMock angelehntes Mocking-Framework zur Verfügung.[1] ABAP 7.50 führt mit Test-Seams die Möglichkeit des partiellen Mockings ein, indem einzelne Codebereiche (z. B. die bis dato nicht mockbaren Funktionsbausteinaufrufe) im Unit-Test redefiniert werden können.[2]

Ab ABAP 7.52 können mittels der Klasse CL_OSQL_TEST_ENVIRONMENT Datenbank-Tabellen gemockt werden. Die gemockten Tabellen ersetzen die Originale in Open-SQL-Anweisungen ohne Änderungen am produktiven Coding, sodass im Testfall nicht auf produktiven Daten gearbeitet wird.[3]

Beispiel

Bearbeiten
class tc_text_buffer definition final for testing
  duration short
  risk level harmless.

  private section.
    methods:
      set_and_get_text for testing
        raising cx_dynamic_check cx_static_check,
      fail_On_Buffer_Overflow for testing
        raising cx_dynamic_check cx_static_check.

endclass.


class tc_text_buffer implementation.

  method fail_on_buffer_overflow.
    data(buffer) = new zcl_text_buffer( ).
    try.
      do 1000 times.
        buffer->add_text( sy-abcde ).
      enddo.
      cl_Abap_unit_assert=>fail( 'No Buffer Overflow' ).
    catch zcx_Buffer_Overflow ##no_Handler.
    endtry.

  endmethod.


  method set_and_get_text.
    constants: c_hello_world type string value 'Hello World'.

    data(buffer) = new zcl_text_buffer( ).
    buffer->set_text( c_hello_world ).

    cl_abap_unit_assert=>assert_equals(
      exporting act = buffer->get_text( )
                exp = c_hello_world ).

  endmethod.

endclass.

Siehe auch

Bearbeiten

Literatur

Bearbeiten

Einzelnachweise

Bearbeiten
  1. ABAP Test Double Framework – An Introduction | SAP Blogs. Abgerufen am 7. Januar 2020.
  2. ABAP News for Release 7.50 – Test Seams and Test Injections | SAP Blogs. Abgerufen am 7. Januar 2020.
  3. SAP Help Portal. Abgerufen am 1. April 2019.