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.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow