Recherche…


Structure d'une classe de test

Les classes de test sont créées en tant que classes locales dans un test unitaire spécial.

Ceci est la structure de base d'une classe de 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.

Toute méthode déclarée avec FOR TESTING sera un test unitaire. setup est une méthode spéciale qui est exécutée avant chaque test.

Séparer l'accès aux données de la logique

Un principe important pour les tests unitaires consiste à séparer l'accès aux données de la logique métier. Une technique efficace consiste à définir des interfaces pour l'accès aux données. Votre classe principale utilise toujours une référence à cette interface au lieu de lire ou d'écrire directement des données.

dans le code de production, la classe principale se verra attribuer un objet qui encapsule les accès aux données. Cela pourrait être une instruction select, des appels de fonction mudule, n'importe quoi vraiment. La partie importante est que cette classe ne doit rien faire d'autre. Pas de logique

Lorsque vous testez la classe principale, vous lui attribuez un objet qui sert des données statiques et factices.

Un exemple pour accéder à la table SCARR

Interface d'accès aux données ZIF_DB_SCARR :

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

Fausse classe de données et classe de 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'idée ici est que dans le code de production, ZCL_MAIN_CLASS obtiendra un objet ZIF_DB_SCARR qui effectue un SELECT et retourne la table entière alors que le test unitaire s'exécute sur un ensemble de données statique défini directement dans le test unitaire.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow