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.
Avalados por :
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
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.
Por que não envolvê-lo em um método que você possa simular?
result = zcl_auth_checker=>get( )->check( ... ).
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
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.
contacto@primeinstitute.com
(+51) 1641 9379
(+57) 1489 6964
© 2024 Copyright. Todos los derechos reservados.
Desarrollado por Prime Institute