Zoeken…


Structuur van een testklasse

Testklassen worden gemaakt als lokale klassen in een speciale eenheidstest.

Dit is de basisstructuur van een testklasse:

CLASS lcl_test DEFINITION
               FOR TESTING
               DURATION SHORT
               RISK LEVEL HARMLESS.

PRIVATE SECTION.
  DATA:
    mo_cut TYPE REF TO zcl_dummy.

  METHODS:
    setup,

  "********* 30 chars *********|
  dummy_test                     for testing.
ENDCLASS.

CLASS lcl_test IMPLEMENTATION.
  METHOD setup.
    CREATE OBJECT mo_cut.
  ENDMETHOD.

  METHOD dummy_test.
    cl_aunit_assert=>fail( ).
  ENDMETHOD.
ENDCLASS.

Elke methode die wordt aangegeven met FOR TESTING is een eenheidsproef. setup is een speciale methode die vóór elke test wordt uitgevoerd.

Gescheiden gegevenstoegang van logica

Een belangrijk principe voor het testen van eenheden is het scheiden van gegevenstoegang en bedrijfslogica. Een efficiënte techniek hiervoor is om interfaces voor gegevenstoegang te definiëren. Uw hoofdklasse gebruikt altijd een verwijzing naar die interface in plaats van directe lees- of schrijfgegevens.

in productiecode krijgt de hoofdklasse een object dat de feitelijke gegevenstoegang omhult. Dit kan een select statement zijn, functiemodules, eigenlijk alles. Het belangrijke deel is dat deze klasse niets anders mag uitvoeren. Geen logica.

Wanneer u de hoofdklasse test, geeft u deze een object dat in plaats daarvan statische, valse gegevens weergeeft.

Een voorbeeld voor toegang tot de SCARR tabel

Data access interface ZIF_DB_SCARR :

INTERFACE zif_db_scarr
  PUBLIC.
    METHODS get_all
      RETURNING
        VALUE(rt_scarr) TYPE scarr_tab .
ENDINTERFACE.

Valse gegevensklasse en testklasse:

CLASS lcl_db_scarr DEFINITION.
  PUBLIC SECTION.
    INTERFACES: zif_db_scarr.
ENDCLASS.

CLASS lcl_db_scarr IMPLEMENTATION.
  METHOD zif_db_scarr~get_all.
    " generate static data here
  ENDMETHOD.
ENDCLASS.

CLASS lcl_test DEFINITION
  FOR TESTING
  DURATION SHORT
  RISK LEVEL HARMLESS.

  PRIVATE SECTION.
    DATA:
      mo_cut TYPE REF TO zcl_main_class.

    METHODS:
      setup.
ENDCLASS.

CLASS lcl_test IMPLEMENTATION.
  METHOD setup.
    DATA: lo_db_scarr TYPE REF TO lcl_db_scarr.

    CREATE OBJECT lo_db_scarr.

    CREATE OBJECT mo_cut
      EXPORTING
        io_db_scarr = lo_db_scarr.
  ENDMETHOD.
ENDCLASS.

Het idee hier is dat in productiecode ZCL_MAIN_CLASS een ZIF_DB_SCARR object krijgt dat een SELECT ZIF_DB_SCARR en de hele tabel retourneert, terwijl de unit-test wordt uitgevoerd tegen een statische dataset die hier in de unit-test is gedefinieerd.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow