ABAP
Test unitario
Ricerca…
Struttura di una classe di test
Le classi di test vengono create come classi locali in un controllo di unità speciale incluso.
Questa è la struttura di base di una classe di test:
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.
Qualsiasi metodo dichiarato con FOR TESTING sarà un test unitario. setup è un metodo speciale che viene eseguito prima di ogni test.
Separare l'accesso ai dati dalla logica
Un principio importante per il test delle unità è quello di separare l'accesso ai dati dalla logica aziendale. Una tecnica efficiente per questo è definire le interfacce per l'accesso ai dati. La tua classe principale usa sempre un riferimento a quell'interfaccia invece di leggere direttamente o scrivere dati.
nel codice di produzione alla classe principale verrà assegnato un oggetto che avvolge l'effettivo accesso ai dati. Questa potrebbe essere una dichiarazione selezionata, chiamate di mudule di funzione, qualsiasi cosa veramente. La parte importante è che questa classe non dovrebbe eseguire nient'altro. Nessuna logica
Durante il test della classe principale, gli dai un oggetto che serve invece dati statici e falsi.
Un esempio per accedere alla tabella SCARR
Interfaccia di accesso ai dati ZIF_DB_SCARR :
INTERFACE zif_db_scarr
PUBLIC.
METHODS get_all
RETURNING
VALUE(rt_scarr) TYPE scarr_tab .
ENDINTERFACE.
Classe dati falsi e classe di test:
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.
L'idea qui è che nel codice di produzione, ZCL_MAIN_CLASS otterrà un oggetto ZIF_DB_SCARR che esegue un SELECT e restituisce l'intera tabella mentre il test dell'unità è eseguito su un set di dati statico definito proprio lì nell'unità di test.