¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Cómo simular la verificación de autorización en pruebas unitarias ABAP en sistema NW 7.50

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 6 Vistas
0
Cargando...

Como se documenta en mi reciente publicación en el blog , me aventuré por primera vez en las pruebas unitarias de ABAP y gracias a la ayuda de miembros de la comunidad como jacques.nomssi , mike.pokraka y varios otros, ya he aprendido mucho y las cosas están funcionando bien.

Tengo una pregunta abierta por ahora y en lugar de enterrarla en los comentarios de mi publicación en el blog, decidí iniciar un nuevo hilo de preguntas y respuestas para ello. En este momento, uso una Z-table para verificar si usuarios específicos tienen permitido realizar algunas acciones y esto está funcionando como debería y también tengo casos de prueba adecuados mediante la simulación de acceso a la tabla. Como todavía estoy en modo de prototipo en un sistema sandbox, esta fue la forma más fácil de implementarlo y ya es mejor que la verificación codificada en duro en el código que quiero reemplazar.

Cuando pronto traslade el código al sistema de desarrollo real, quiero cambiar esta lógica a un objeto de autorización adecuado y verificar si un usuario tiene permiso para realizar una acción. Entonces, mi pregunta es: ¿cómo puedo "simular" la verificación de autorización durante las pruebas unitarias?

Ya he buscado una respuesta, pero aunque encontré algunos otros artículos interesantes en el camino (por ejemplo, Mejores Prácticas de ABAP Unit en el Wiki o la publicación en el blog de Jacques Trabajando con Pruebas Unitarias de ABAP ) ninguno de ellos contenía la respuesta a mi pregunta específica. Entonces, ¿hay alguna que funcione en un sistema NW 7.50 y no sea demasiado complicada de implementar? Por ejemplo, podría imaginar hacer algo a lo largo de las líneas de otra definición de interfaz (una para la autorización en lugar de selecciones de tabla) pero no estoy seguro si esa es la mejor opción.

Muchas gracias y Saludos

Baerbel

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

sandra.rossi

Hola Sandra - Lo siento, pero tu respuesta es demasiado críptica para que la entienda, ya que hasta ahora solo estoy rascando la superficie de ABAP OO y las pruebas unitarias.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

¿Por qué no envolverlo en un método que puedas simular?

result = zcl_auth_checker=>get( )->check( ... ).
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

¡Hola Bärbel!

Esta es una buena pregunta, hoy tengo exactamente el mismo problema 🙂

Estaba probando la autorización con un valor real, y es una mala práctica. Simplemente porque mi prueba podría fallar si mi autorización cambia algún día. O si alguien con más autorización prueba el código.

Desde el punto de vista del Código Limpio, creo que debes crear una clase dedicada para el control de autorización, con una interfaz. Y crear un simple mock de esta clase. Pero eso significa que no puedes crear pruebas unitarias para esta clase específica.

Fred

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

OK, así que comencemos con un ejemplo simple.

Primero necesito una interfaz

INTERFACE if_authorization_checker.
        METHODS check_tcode
            IMPORTING
            iv_transaction   TYPE sytcode
            RETURNING
            VALUE(rv_result) TYPE abap_bool.
    ENDINTERFACE.
    

Tengo mi clase real que prueba la autorización

CLASS lc_authorization_checker DEFINITION.
        PUBLIC SECTION.
        INTERFACES if_authorization_checker.
    ENDCLASS.
    CLASS lc_authorization_checker IMPLEMENTATION.
        METHOD if_authorization_checker~check_tcode.
        AUTHORITY-CHECK OBJECT 'S_TCODE' ID  'TCD' FIELD iv_transaction.
    ENDMETHOD.
    ENDCLASS.
    

Pero también tengo un Mock para la misma interfaz

CLASS lc_authorization_checker_mock DEFINITION.
        PUBLIC SECTION.
        INTERFACES if_authorization_checker.
        METHODS set_tcode_result
        IMPORTING
        iv_result TYPE abap_bool.
        DATA result_tcode TYPE abap_bool.
    ENDCLASS.
    
CLASS lc_authorization_checker_mock IMPLEMENTATION.
        METHOD if_authorization_checker~check_tcode.
        rv_result = result_tcode.
    ENDMETHOD.
    METHOD set_tcode_result.
        result_tcode = iv_result.
    ENDMETHOD.
    ENDCLASS.
    

el método Mock también contiene una variable global RESULT_TCODE. Esta variable simplemente contiene el resultado que debería recibir.

El método Mock también necesita un método para poblar esta variable.

Ahora debes inyectar esta clase en tu clase final.

CLASS lc_my_beautiful_class DEFINITION.
        PUBLIC SECTION
            
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?