Поиск…


Структура тестового класса

Тестовые классы создаются в качестве локальных классов в специальном тестировании.

Это базовая структура тестового класса:

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 и возвращает всю таблицу, в то время как единичный тест работает со статическим набором данных, определенным здесь, в модульном тесте.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow