Buscar..


Estructura de una clase de prueba

Las clases de prueba se crean como clases locales en una prueba de unidad especial incluida.

Esta es la estructura básica de una clase de prueba:

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.

Cualquier método declarado con FOR TESTING será una prueba unitaria. setup es un método especial que se ejecuta antes de cada prueba.

Acceso a datos separados de la lógica

Un principio importante para las pruebas unitarias es separar el acceso a los datos de la lógica empresarial. Una técnica eficiente para esto es definir interfaces para el acceso a datos. Su clase principal siempre usa una referencia a esa interfaz en lugar de leer directamente o escribir datos.

En el código de producción, la clase principal recibirá un objeto que ajusta el acceso a los datos reales. Esto podría ser una declaración de selección, función llamadas mudule, cualquier cosa realmente. La parte importante es que esta clase no debe realizar nada más. Ilógico.

Al probar la clase principal, le asigna un objeto que sirve datos estáticos y falsos.

Un ejemplo para acceder a la tabla SCARR

Interfaz de acceso a datos ZIF_DB_SCARR :

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

Clase de datos falsos y clase de prueba:

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.

La idea aquí es que en el código de producción, ZCL_MAIN_CLASS obtendrá un objeto ZIF_DB_SCARR que realiza una SELECT y devuelve toda la tabla mientras que la prueba de la unidad se ejecuta en un conjunto de datos estáticos definidos allí mismo en la prueba de la unidad.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow