ABAP
Testów jednostkowych
Szukaj…
Struktura klasy testowej
Klasy testowe są tworzone jako klasy lokalne w specjalnym teście jednostkowym.
To jest podstawowa struktura klasy testowej:
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.
Każda metoda zadeklarowana za pomocą FOR TESTING będzie testem jednostkowym. setup to specjalna metoda wykonywana przed każdym testem.
Oddziel dostęp do danych od logiki
Ważną zasadą testów jednostkowych jest oddzielenie dostępu do danych od logiki biznesowej. Jedną z wydajnych technik jest zdefiniowanie interfejsów dostępu do danych. Twoja główna klasa zawsze używa odniesienia do tego interfejsu zamiast bezpośredniego odczytu lub zapisu danych.
w kodzie produkcyjnym główna klasa otrzyma obiekt, który otacza faktyczny dostęp do danych. Może to być instrukcja select, wywołania funkcji mudule, cokolwiek naprawdę. Ważną częścią jest to, że ta klasa nie powinna wykonywać niczego innego. Nielogiczne.
Podczas testowania głównej klasy dajesz jej obiekt, który zamiast tego służy statycznym, fałszywym danym.
Przykład dostępu do tabeli SCARR
Interfejs dostępu do danych ZIF_DB_SCARR :
INTERFACE zif_db_scarr
PUBLIC.
METHODS get_all
RETURNING
VALUE(rt_scarr) TYPE scarr_tab .
ENDINTERFACE.
Fałszywa klasa danych i klasa testowa:
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.
Chodzi o to, że w kodzie produkcyjnym ZCL_MAIN_CLASS otrzyma obiekt ZIF_DB_SCARR który wykonuje SELECT i zwraca całą tabelę, podczas gdy test jednostkowy działa na statycznym zestawie danych zdefiniowanym bezpośrednio w teście jednostkowym.