ABAP
Testen van een eenheid
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.