В первой части я кратко описал назначение unit-test и сделал unit-test для локального класса. Теперь сделаем unit-test для функционального модуля и для глобального класса.
Unit-test для функционального модуля.
Сначала создадим функциональный метод ZFM_CALCULATOR и сделаем unit-test для него
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
FUNCTION zfm_calculator. *"---------------------------------------------------------------------- *"*"Локальный интерфейс: *" IMPORTING *" REFERENCE(IV_EVAL) TYPE STRING *" EXPORTING *" REFERENCE(EV_VAL) TYPE I *"---------------------------------------------------------------------- DATA: lv_eval TYPE string, lv_val TYPE string, lv_operator TYPE c VALUE '+', lv_val1 TYPE i VALUE 0, lv_val2 TYPE i. lv_eval = iv_eval. CONDENSE lv_eval NO-GAPS. DATA(lv_len) = strlen( lv_eval ). DATA(lv_pos) = 0. WHILE lv_pos < lv_len. IF lv_eval+lv_pos(1) CO '1234567890'. lv_val &&= lv_eval+lv_pos(1). ELSE. lv_val2 = lv_val. CLEAR lv_val. PERFORM eval USING lv_val1 lv_val2 lv_operator CHANGING lv_val1. lv_operator = lv_eval+lv_pos(1). ENDIF. lv_pos += 1. ENDWHILE. lv_val2 = lv_val. CLEAR lv_val. PERFORM eval USING lv_val1 lv_val2 lv_operator CHANGING ev_val. ENDFUNCTION. FORM eval USING iv_val1 TYPE i iv_val2 TYPE i iv_operator TYPE c CHANGING cv_val. CLEAR cv_val. CASE iv_operator. WHEN '+'. cv_val = iv_val1 + iv_val2. WHEN '-'. cv_val = iv_val1 - iv_val2. ENDCASE. ENDFORM. |
Теперь выберем пункт меню «Перейти к» — Локальные тестовые классы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
*----------------------------------------------------------------------* ***INCLUDE LZFUGR_TESTT99. *----------------------------------------------------------------------* CLASS lcl_calculator_t DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS . PRIVATE SECTION. CLASS-METHODS: class_setup. CLASS-METHODS: class_teardown. METHODS: setup. METHODS: teardown. METHODS: calculate FOR TESTING. ENDCLASS. CLASS lcl_calculator_t IMPLEMENTATION. METHOD class_setup. ENDMETHOD. METHOD class_teardown. ENDMETHOD. METHOD setup. ENDMETHOD. METHOD teardown. ENDMETHOD. METHOD calculate. DATA: lv_eval TYPE string, lv_val TYPE i. lv_eval = '-1+2'. CALL FUNCTION 'ZFM_CALCULATOR' EXPORTING iv_eval = lv_eval IMPORTING ev_val = lv_val. cl_abap_unit_assert=>assert_equals( act = lv_val exp = 1 ). ENDMETHOD. ENDCLASS. |
Unit-test для глобального класса
Unit-test для глобального класса почти не отличается от тестов локального класса. Только для создание тестового класса автоматизировано можно использовать wizard, который вызывается с помощью меню Утилиты — Тестовые классы — Сгенерировать
В результате будет создан класс, который уже дружественен и может вызывать приватные методы.