ABAP
Единичное тестирование
Поиск…
Структура тестового класса
Тестовые классы создаются в качестве локальных классов в специальном тестировании.
Это базовая структура тестового класса:
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.
Любой метод, объявленный с помощью FOR TESTING будет модульным тестом. setup - это специальный метод, который выполняется перед каждым тестом.
Отдельный доступ к данным из логики
Важным принципом модульного тестирования является разделение доступа к данным с бизнес-логикой. Одним из эффективных методов для этого является определение интерфейсов для доступа к данным. Ваш основной класс всегда использует ссылку на этот интерфейс вместо прямого чтения или записи данных.
в производственном коде основному классу будет предоставлен объект, который обертывает фактический доступ к данным. Это может быть оператор выбора, вызов функции mudule, что-то действительно. Важная часть состоит в том, что этот класс не должен выполнять ничего другого. Нет логики.
При тестировании основного класса вы даете ему объект, который вместо этого выполняет статические, поддельные данные.
Пример доступа к таблице SCARR
Интерфейс доступа к данным ZIF_DB_SCARR :
INTERFACE zif_db_scarr
PUBLIC.
METHODS get_all
RETURNING
VALUE(rt_scarr) TYPE scarr_tab .
ENDINTERFACE.
Поддельный класс данных и тестовый класс:
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.
Идея здесь заключается в том, что в производственном коде ZCL_MAIN_CLASS получит объект ZIF_DB_SCARR который выполняет SELECT и возвращает всю таблицу, в то время как единичный тест работает со статическим набором данных, определенным здесь, в модульном тесте.