ABAP Unit – Exercício Jan-Ken-Pon

Após o post sobre ABAP Units escrito pelo @furlan, nada melhor que um exercício. Particularmente gosto de nunca esgotar os assuntos nos posts que faço, para sempre despertar a curiosidade do leitor.

Aqui não será necessário codificar… os testes unitários. :-P. Codificaremos Você codificará aqui uma classe que implementa a regra de negócio de um jogo de Jan-Ken-Pon (o famoso “Pedra-Paper-Tesoura”) . Sim, a intenção aqui é aprender mais ABAP Units e seu uso, não vamos nos preocupar com regras de negócio desconhecidas. Todo mundo já jogou Jan-Ken-Pon e sabe das suas regras, não é verdade?

Arquivo SAP Link

Você terá uma classe global, uma interface global, um report e alguns objetos do dicionário para auxiliá-lo. Todos os objetos estão incorporados em um único arquivo .nugg (veja o post sobre SAP Link se você não sabe o que é isso)

Clique aqui para baixar o arquivo .nugg (é necessário substituir a extensão do arquivo de .txt para .nugg)

Domínios e Elementos de Dados

Z_ABAP101_JAN_KEN_PON_HANDS – Guarda as possíveis jogadas: Rock, Paper e Scissors.

Z_ABAP101_JAN_KEN_PON_PLAYERS – Guarda alguns jogadores

Interface

Z_IF_ABAP101_JAN_KEN_PON_TYPES – Contém os tipos usados pela classe Z_CL_ABAP101_JAN_KEN_PON. Veja de onde vem essa ideia.

Classe

Z_CL_ABAP101_JAN_KEN_PON – Lógica de um Jogo de Jon-Ken-Pon

Atributos

Todos os atributos estão prontos na classe disponibilizada. São eles.

+C_HAND_SCISSORS – Constante para Scissors (Tesoura)

+C_HAND_ROCK – Constante para Rock (Pedra)

+C_HAND_PAPER – Constante para Paper (Papel)

-V_PLAYER_1 – Nome do Jogador 1

-V_PLAYER_2- Nome do Jogador 2

-V_LAST_WINNER – Último jogador a ganhar. Branco (space) caso empate

Métodos

+CONSTRUCTOR – Cada instancia representará um duelo de Jan-Ken-Pon. É necessário definir os nomes dos dois jogadores.  (implementar)

+JAN_KEN_PON – Receberá duas mãos (uma de cada jogador) e retornará o nome do jogador ganhador. (implementar)

+GENERATE_RANDOM_HAND – Esse método é legal. Ele apenas deve retornar uma mão aleatoriamente. (implementar) Caso tenha problemas nesse método comente no post.

+GET_WINNER –  retorna o último ganhador. Esse é moleza. (implementar)

+GET_WINNER_OF_HANDDada uma mão, retorna a mão que ganha dela.  (implementar testes unitários – sim, nem todos os testes foram criados ;-))

+PRINT_HANDEncapsula métodos PRINT_HAND* (feito – uso não obrigatório e sem testes)

-PRINT_HAND_PAPER – Imprime em write uma mão gesticulando Paper (feito – uso não obrigatório e sem testes)

-PRINT_HAND_ROCK – Imprime em write uma mão gesticulando Rock (feito – uso não obrigatório e sem testes)

-PRINT_HAND_SCISSORS – Imprime em write uma mão gesticulando Scissors (feito – uso não obrigatório e sem testes)

Report

Z_ABAP101_JAN_KEN_PON – Faz uso da classe Z_CL_ABAP101_JAN_KEN_PON para criar um report em que se joga Jan-Ken-Pon com o ABAP AS – Pode ajudar em saber como implementar os métodos da classe acima.

Testes Unitários

Em TDD (Test-Driven Development – ou desenvolvimento orientado a testes), escreve-se primeiros os testes unitários para então implementar os métodos e então refator o código. Esse processo também é conhecido como Red-Green-Refactor, uma vez que nas ferramentas de teste unitário, a cor vermelha significa teste falhado e a cor verde significa teste com sucesso. Refactor significa refatorar o código para fins diversos: facilitar manutenção, design, desempenho etc. No nosso caso, os testes já estão prontos. 🙂

Execução (Red)

Ao importar os objetos via SAP Link, execute os testes unitários abrindo a classe Z_CL_ABAP101_JAN_KEN_PON na transação SE24. No menu, vá em “Class >> Unit Test“. Como não há implementação dos métodos, os testes deverão falhar todos. Conforme mostra a imagem a seguir.

Pode-se ver que são muitos os testes. Muitos deles chegam a ser um tanto quanto ambiguos, mas testes nunca são demais.. ou nunca deveria ser pelo menos. Para abrir os testes, ainda na SE24 vá em “Goto > Local Test ClasseS“. Não seja pilantra: não vale remover testes. Você pode adicionar testes que achar pertinente mas para o fim do exercício não é necessário.

Implementação (Green)

Implemente os métodos um a um: use a descrição dos métodos postada aqui, veja o report que usa a classe como base, consulte os testes unitários para saber a saída desejada, jogue jon-ken-pon com o colega de trabalho no horário do almoço para lembrar a regra de negócio etc.

Conforme vá implementando os métodos, rode os testes unitários para saber se sua implementação está correta. Aqui há um screenshot de testes parcialmente executados com sucesso.

Quando todos os testes forem realizados com sucesso, será exibida a seguinte mensagem na barra inferior da SE24.

 

Mostre que conseguiu!

Caso tenha conseguido implementar todos os métodos com sucesso, disponibilize:

  • Um arquivo SAP Link com sua implementação
  • Um screenshot com a mensagem de sucesso
  • E de quebra um futuro assunto do ABAP101 Podcast – Postou os 2 acima, você tem direito a um Podcast especial!

Mostre o por quê não conseguiu!

Caso não tenha conseguido implementar todos os métodos com sucesso, não se preocupe, o ABAP101 vai te ajudar… por isso disponibilize:

  • Suas dúvidas
  • Um arquivo SAP Link com sua implementação
  • Um screenshot com a execução dos testes
  • E de quebra um futuro de post do ABAP101 – Postou os 2 acima, tem direito a um post especial

No ABAP101 é assim, quem tentou, já ganhou.

Fábio Pagoti

Formado em Sistemas de Informação pela Universidade de São Paulo. Comecei no mundo da programação com Java mas logo caí no mundo ABAP. Estagiei na Nestlé por 2 anos e foi lá onde conheci o Furlan. Depois de efetivado fui morar no Canadá por 1 ano onde pude aprender a área de testes em desenvolvimento de software. Hoje sou consultor e instrutor ABAP, amante de projetos Open Source, Wordpress, Data Mining e da esfera SAP. Siga-me no twitter: @fabiopagoti

You may also like...

3 Responses

  1. July 13, 2011

    […] Para melhor entender todo o processo, resolvemos usar TDD para guiar o nosso desenvolvimento e usamos o exemplo do Jogo Papel x Tesoura x Pedra tirado do site Abap101. […]

  2. October 18, 2011

    […] do ABAP Units usando o exemplo da Calculadora criado pelo Furlan e praticar a partir do post Jan-Ken-Pon (veja também este jogo no projeto ABAP Games no SAP Code […]

  3. January 3, 2012

    […] ABAP Unit – Exercício Jan-Ken-Pon […]