Upload
jose-nunes
View
434
Download
1
Embed Size (px)
Citation preview
TDD com ABAPPor José Nunes
Sumário
• O que é TDD?• Três leis do TDD• Disciplina• Testes Unitários• Beneficios• ABAP Unit• Setup & Teardown• Fixtures• Test Seams & Test Injection• CDS Test Double Framework
O que é TDD?
• Test-Driven Development ou Desenvolvimento guiado por testes
• Desenvolvimento de Software baseado em ciclos curtos:• Escrever um teste;
• Escrever código que faça o teste passar;
• Refatorar;
• Baseado em testes unitários
Três leis do TDD
• Não é permitido escrever nenhum código produtivo a menos que seja para fazer um teste unitário passar;
• Não é permitido escrever mais que um teste unitário que seja suficiente para falhar; erro de compilação é uma falha
• Não é permitido escrever mais código produtivo do que o necessário para fazer um teste unitário passar;
Disciplina
Testes Unitários
• Teste Unitário ou Teste de Unidade são testes escritos para testar a menor parte testável de um software, ou unidade.
• Como menor parte testável podemos ter uma classe ou os seusmétodos
• Testes unitários devem ser:• Independentes
• Isolados
• Concisos
• Testes unitários são baseados em afirmações (assertions)
Benefícios
• Feedback mais rápido
• Reduz tempo de debug
• Reduz retrabalho
• Modularização
• Qualidade
• Segurança nas alterações
• Confiança no deploy
ABAP Unit
• Framework de teste unitário do ABAP;
• Presente desde o NW 6.40 (2004)
• Aderente ao xUnit;
• Classe CL_AUNIT_ASSERT – até releases 7.01
• Classe CL_ABAP_UNIT_ASSERT – releases >= 7.02
ABAP Unit: Classe de Teste – Definição
class lcl_class_test definition
"indica que a classe é de testefor testing
"define o nível de risco da classe de teste: CRITICAL|DANGEROUS|HARMLESS
risk level harmless
"duração dos testes: SHORT|MEDIUM|LONG
duration short.
public section.
public section.
methods: test_method for testing.
endclass.
ABAP Unit: CL_ABAP_UNIT_ASSERT
• ASSERT_BOUND / ASSERT_NOT_BOUND• ASSERT_EQUALS / ASSERT_DIFFERS• ASSERT_EQUALS_FLOAT• ASSERT_CHAR_CP / ASSERT_CHAR_NP• ASSERT_INITIAL / ASSERT_NOT_INITIAL• ASSERT_TRUE / ASSERT_FALSE• ASSERT_TABLE_CONTAINS / ASSERT_TABLE_NOT_CONTAINS• ASSERT_NUMBER_BETWEEN• ASSERT_TEXT_MATCHES• ASSERT_SUBRC• ASSERT_THAT
ABAP Unit: Executando o teste
• No Eclipse:
ABAP Unit: Executando o teste
• No SAP GUI:
ABAP Unit: Resultado da Execução
• Sucesso:
ABAP Unit: Resultado da Execução
• Erro:
ABAP Unit: Coverage Test
• Indica o nível de cobertura do seu código de teste;
• No Eclipse, botão direito sobre o código -> Coverage As -> ABAP Unit Test;
ABAP Unit: Coverage Test
Setup & Teardown
• Métodos auxiliares da classe de teste p/ auxiliar a inicialização/finalização dos testes
• Método de instância setup, executado antes de cada método de teste;
• Método de instância teardown, executado após cada método de teste;
• Método estático class_setup, executado apenas uma vez, antes de todos os métodos de teste;
• Método estático class_teardown, executado apenas uma vez, depoisque todos os métodos de teste foram executados;
Setup & Teardown
class lcl_contaBancaria_test definitionfor testingrisk level harmlessduration short.
private section.data: lo_conta type ref to lcl_contabancaria.
methods: setup,
testDeposito for testing.
endclass.
class lcl_contaBancaria_test implementation.
method setup.
create object lo_conta.
endmethod.
method testDeposito.
lo_conta->deposito( 50 ).
cl_abap_unit_assert=>assert_equals(
exporting
ACT = lo_conta->saldo
EXP = 50
).
endmethod.
endclass.
Test Seams & Test Injection
• Test seams são áreas de código demarcadas para substituição por um Test Injection;
• Test Injection são áreas de código presentes em classes de teste que substituem o código presente em áreas demarcadas como Test Seams
• Ideal p/ código legado
• Presente desde ABAP 7.50
Test Seams & Test Injection
• Exemplos:• Simular acesso a recursos externos, como banco de dados, arquivos,
interfaces, etc;
• Testar cenários de erro complexos, com exceções específicas;
• Ignorar ou eliminar código que não está sob teste ou não deve ser testado –authority-checks, chamadas ao GUI, etc;
Test Seams & Test InjectionSimular acesso ao banco de dados
Test Seams & Test InjectionDefinir Test Seam
Test Seams & Test InjectionUsar o Test Injection
CDS Test Double Framework
• Disponível a partir do NW AS ABAP 7.51
• https://blogs.sap.com/2016/10/19/introduction-cds-test-double-framework-write-unit-tests-abap-cds-entities/
Perguntas?
Referências:
• Test Driven Development – By Example – by Kent Beckhttps://www.amazon.com/Test-Driven-Development-By-Example/dp/0321146530
• Test Driven Development by Robert Martinhttps://www.youtube.com/watch?v=qmS4ojQ1Pa8
• Test Seams & Test Injection by Horst Kellerhttps://blogs.sap.com/2015/10/23/abap-news-for-750-test-seams-and-injections/
• Introduction to CDS Test Doubles by Sunil Bandameedapallihttps://blogs.sap.com/2016/10/19/introduction-cds-test-double-framework-write-unit-tests-abap-cds-entities/