¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Como simular a verificação de autorização em testes unitários ABAP no sistema NW 7.50

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

Como documentado em minha recente postagem no blog , me aventurei pela primeira vez em testes unitários de ABAP e graças à ajuda de membros da comunidade como jacques.nomssi , mike.pokraka e vários outros, aprendi muito e as coisas estão funcionando bem.

Tenho uma pergunta em aberto no momento e, em vez de enterrá-la nos comentários da minha postagem no blog, decidi iniciar um novo tópico de perguntas e respostas para isso. Atualmente, estou usando uma Z-table para verificar se usuários específicos têm permissão para realizar algumas ações e isso está funcionando como deveria, além de ter casos de teste adequados simulando o acesso à tabela. Como ainda estou em modo de protótipo em um sistema sandbox, essa foi a forma mais fácil de implementar e já é melhor do que a verificação codificada no código que pretendo substituir.

Quando eu migrar o código para o sistema de desenvolvimento real em breve, quero mudar essa lógica para um objeto de autorização adequado e verificar se um usuário tem permissão para realizar uma ação. Então, minha pergunta é: como posso "simular" a verificação de autorização durante os testes unitários?

Já procurei por uma resposta, mas embora tenha encontrado alguns outros artigos interessantes pelo caminho (por exemplo, Melhores Práticas de ABAP Unit no Wiki ou a postagem no blog de Jacques Trabalhando com Testes Unitários de ABAP ) nenhum deles continha a resposta para minha pergunta específica. Então, há alguma que funcione em um sistema NW 7.50 e não seja muito complicada de implementar? Por exemplo, posso imaginar fazer algo ao longo das linhas de outra definição de interface (uma para autorização em vez de seleções de tabela), mas não tenho certeza se essa é a melhor opção.

Muito obrigada e cumprimentos

Baerbel

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

4 Respuestas

0
Cargando...

sandra.rossi

Olá Sandra - Desculpe, mas sua resposta está muito criptica para eu entender, já que até agora estou apenas arranhando a superfície de ABAP OO e testes unitários.

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

Por que não envolvê-lo em um método que você possa simular?

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

Olá Bärbel!

Esta é uma boa pergunta, hoje estou enfrentando exatamente o mesmo problema 😊

Estava testando a autorização com um valor real, e isso é uma má prática. Simplesmente porque meu teste poderia falhar se minha autorização mudar um dia. Ou se alguém com mais autorização testar o código.

Do ponto de vista do Código Limpo, acredito que você deve criar uma classe dedicada para o controle de autorização, com uma interface. E criar um simples mock dessa classe. Mas isso significa que você não pode criar testes unitários para essa classe específica.

Fred

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

OK, então vamos começar com um exemplo simples.

Primeiro, eu preciso de uma interface.

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

Tenho minha classe real que testa a autorização.

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.
    

Mas também tenho um Mock para a mesma interface.

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.
    

o método Mock também contém uma variável global RESULT_TCODE. Esta variável simplesmente contém o resultado que deve ser recebido.

O método Mock também precisa de um método para preencher esta variável.

Agora você precisa injetar esta classe na sua classe 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?