Ricerca…


Struttura di una classe di test

Le classi di test vengono create come classi locali in un controllo di unità speciale incluso.

Questa è la struttura di base di una classe di test:

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.

Qualsiasi metodo dichiarato con FOR TESTING sarà un test unitario. setup è un metodo speciale che viene eseguito prima di ogni test.

Separare l'accesso ai dati dalla logica

Un principio importante per il test delle unità è quello di separare l'accesso ai dati dalla logica aziendale. Una tecnica efficiente per questo è definire le interfacce per l'accesso ai dati. La tua classe principale usa sempre un riferimento a quell'interfaccia invece di leggere direttamente o scrivere dati.

nel codice di produzione alla classe principale verrà assegnato un oggetto che avvolge l'effettivo accesso ai dati. Questa potrebbe essere una dichiarazione selezionata, chiamate di mudule di funzione, qualsiasi cosa veramente. La parte importante è che questa classe non dovrebbe eseguire nient'altro. Nessuna logica

Durante il test della classe principale, gli dai un oggetto che serve invece dati statici e falsi.

Un esempio per accedere alla tabella SCARR

Interfaccia di accesso ai dati ZIF_DB_SCARR :

INTERFACE zif_db_scarr
  PUBLIC.
    METHODS get_all
      RETURNING
        VALUE(rt_scarr) TYPE scarr_tab .
ENDINTERFACE.

Classe dati falsi e classe di test:

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.

L'idea qui è che nel codice di produzione, ZCL_MAIN_CLASS otterrà un oggetto ZIF_DB_SCARR che esegue un SELECT e restituisce l'intera tabella mentre il test dell'unità è eseguito su un set di dati statico definito proprio lì nell'unità di test.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow