Ansicht
Dokumentation

CLCERT_EXIT_TEST_UTIL - Hilfsklasse für Unit Tests von Exits

CLCERT_EXIT_TEST_UTIL - Hilfsklasse für Unit Tests von Exits

PERFORM Short Reference   CPI1466 during Backup  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Funktionalität

Diese Klasse unterstützt Unit-Tests von Implementierungen der Exits im BC-Deployment-Framework Exits (Methoden IFCERT_AE_CHECK~CHECK, IFCERT_AEAFTER_SAVE~AFTER_SAVE und IFCERT_AE_AFTER_COMMIT~AFTER_COMMIT ).

Um die Exitimplementierungen in einem Unit Test Aufrufen zu können müssen Instanzen der Interfaces IFCERT_DATA_HANDLER und IFCERT_MESSAGE_HANDLER erzeugt werden. Diese Klasse stellt Methoden zur Verfügung, die diese Instanzen erzeugen.

Beziehungen

Beispiel

Am folgenden Beispiel wird die Implementierung eines Unit Tests für den After Save Exit demosnstriert.

METHOD test_after_save.
DATA:
lr_test_util TYPE REF TO clcert_exit_test_util,
lr_data_handler TYPE REF TO ifcert_data_handler_exit_test,
lr_message_handler TYPE REF TO ifcert_message_handler,
ls_country TYPE scert_country,
lt_country_ins TYPE TABLE OF scert_country,
lt_country_upd TYPE TABLE OF scert_country,
lt_country_del TYPE TABLE OF scert_country,
lr_exit TYPE REF TO clcert_exits_country,
lt_tablenames TYPE scert_tablenames_ttype,
ls_tablename LIKE LINE OF lt_tablenames,
lt_messages TYPE scert_rt_msg_ttype,
lv_subrc TYPE sy-subrc,
lv_exception_raised TYPE abap_bool,
lr_ex TYPE REF TO cx_ceng_service_failure.

*-- create test utility
CREATE OBJECT lr_test_util.
*-- get message and data handler
lr_data_handler = lr_test_util->get_data_handler( ).
lr_message_handler = lr_test_util->get_message_handler( ).

*-- add data to data handler
ls_country-country = 'AAA'.
APPEND ls_country TO lt_country_ins.
ls_country-country = 'BAA'.
APPEND ls_country TO lt_country_upd.
ls_country-country = 'CCC'.
APPEND ls_country TO lt_country_del.

TRY.
lr_data_handler->set_table_data(
it_data_ins = lt_country_ins
it_data_upd = lt_country_upd
it_data_del = lt_country_del
iv_tablename = 'SCERT_COUNTRY'
).
CATCH cx_ceng_service_failure INTO lr_ex.
cl_aunit_assert=>abort(
msg = lr_ex->get_text( )
quit = cl_aunit_assert=>class
).
ENDTRY.

*-- fill tablename internal table
ls_tablename = 'SCERT_COUNTRY'.
APPEND ls_tablename TO lt_tablenames.

*-- create and call exit
CREATE OBJECT lr_exit.

TRY.
lr_exit->ifcert_ae_after_save~after_save(
it_tablenames = lt_tablenames
ir_data_handler = lr_data_handler
ir_log_handler = lr_message_handler
).
CATCH cx_ceng_after_save_error .
ENDTRY.

*-- check that data was available in exit in exit
lr_message_handler->get_all_messages(
IMPORTING
et_messages = lt_messages
).

*-- inserted data
READ TABLE lt_messages
WITH KEY msgno = '003'
msgid = 'SCERT_TEST'
msgv1 = ifcert_types=>ac_op_insert
TRANSPORTING NO FIELDS.
lv_subrc = sy-subrc.
cl_aunit_assert=>assert_subrc(
exp = 0
act = lv_subrc
msg = 'Inserted data not available in exit'
level = cl_aunit_assert=>critical
quit = cl_aunit_assert=>no
).

*-- updated data
READ TABLE lt_messages
WITH KEY msgno = '003'
msgid = 'SCERT_TEST'
msgv1 = ifcert_types=>ac_op_update
TRANSPORTING NO FIELDS.
lv_subrc = sy-subrc.
cl_aunit_assert=>assert_subrc(
exp = 0
act = lv_subrc
msg = 'Updated data not available in exit'
level = cl_aunit_assert=>critical
quit = cl_aunit_assert=>no
).

*-- deleted data
READ TABLE lt_messages
WITH KEY msgno = '003'
msgid = 'SCERT_TEST'
msgv1 = ifcert_types=>ac_op_delete
TRANSPORTING NO FIELDS.
lv_subrc = sy-subrc.
cl_aunit_assert=>assert_subrc(
exp = 0
act = lv_subrc
msg = 'Deleted data not available in exit'
level = cl_aunit_assert=>critical
quit = cl_aunit_assert=>no
).


*-- check that exception is raised
CLEAR lt_country_ins.
CLEAR lt_country_upd.
CLEAR lt_country_del.
ls_country-country = 'CCC'.
ls_country-intca = 'YYY'.
APPEND ls_country TO lt_country_del.

TRY.
lr_data_handler->set_table_data(
it_data_ins = lt_country_ins
it_data_upd = lt_country_upd
it_data_del = lt_country_del
iv_tablename = 'SCERT_COUNTRY'
).
CATCH cx_ceng_service_failure INTO lr_ex.
cl_aunit_assert=>abort(
msg = lr_ex->get_text( )
quit = cl_aunit_assert=>class
).
ENDTRY.

*-- get new message handler
lr_message_handler = lr_test_util->get_message_handler( ).
TRY.
lr_exit->ifcert_ae_after_save~after_save(
it_tablenames = lt_tablenames
ir_data_handler = lr_data_handler
ir_log_handler = lr_message_handler
).
CATCH cx_ceng_after_save_error .
lv_exception_raised = abap_true.
ENDTRY.

cl_aunit_assert=>assert_equals(
exp = abap_true
act = lv_exception_raised
msg = 'Exception not raised correctly'
level = cl_aunit_assert=>critical
quit = cl_aunit_assert=>no
).

ENDMETHOD. "test_after_save

Hinweise

In dem Beispiel wird die Implementierung des Exits anhand der zurückgegebenen Nachrichten in IFCERT_MESSAGE_HANDLER überprüft. Bei Unit Tests von realen Exits kann die Überprüfung natürlich auch anhand anderer Merkmale erfolgen. Welche Merkmale dies konkret sind hängt stark von den individuellen Exitimplementierungen ab. Vorstellbar wäre z.B. das Überprüfen von Einträgen in Datenbanktabellen, die von dem Exit erzeugt werden.

Weiterführende Informationen






SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up   Fill RESBD Structure from EBP Component Structure  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 7224 Date: 20240420 Time: 073029     sap01-206 ( 52 ms )