ABAP
Tests unitaires
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.