sitsp developers 2016 - abap c/ tdd
TRANSCRIPT
![Page 1: SITSP Developers 2016 - ABAP c/ TDD](https://reader034.vdocument.in/reader034/viewer/2022051405/586e7fed1a28aba0038b5095/html5/thumbnails/1.jpg)
TDD com ABAPPor José Nunes
![Page 2: SITSP Developers 2016 - ABAP c/ TDD](https://reader034.vdocument.in/reader034/viewer/2022051405/586e7fed1a28aba0038b5095/html5/thumbnails/2.jpg)
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
![Page 3: SITSP Developers 2016 - ABAP c/ TDD](https://reader034.vdocument.in/reader034/viewer/2022051405/586e7fed1a28aba0038b5095/html5/thumbnails/3.jpg)
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
![Page 4: SITSP Developers 2016 - ABAP c/ TDD](https://reader034.vdocument.in/reader034/viewer/2022051405/586e7fed1a28aba0038b5095/html5/thumbnails/4.jpg)
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;
![Page 5: SITSP Developers 2016 - ABAP c/ TDD](https://reader034.vdocument.in/reader034/viewer/2022051405/586e7fed1a28aba0038b5095/html5/thumbnails/5.jpg)
Disciplina
![Page 6: SITSP Developers 2016 - ABAP c/ TDD](https://reader034.vdocument.in/reader034/viewer/2022051405/586e7fed1a28aba0038b5095/html5/thumbnails/6.jpg)
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)
![Page 7: SITSP Developers 2016 - ABAP c/ TDD](https://reader034.vdocument.in/reader034/viewer/2022051405/586e7fed1a28aba0038b5095/html5/thumbnails/7.jpg)
Benefícios
• Feedback mais rápido
• Reduz tempo de debug
• Reduz retrabalho
• Modularização
• Qualidade
• Segurança nas alterações
• Confiança no deploy
![Page 8: SITSP Developers 2016 - ABAP c/ TDD](https://reader034.vdocument.in/reader034/viewer/2022051405/586e7fed1a28aba0038b5095/html5/thumbnails/8.jpg)
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
![Page 9: SITSP Developers 2016 - ABAP c/ TDD](https://reader034.vdocument.in/reader034/viewer/2022051405/586e7fed1a28aba0038b5095/html5/thumbnails/9.jpg)
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.
![Page 10: SITSP Developers 2016 - ABAP c/ TDD](https://reader034.vdocument.in/reader034/viewer/2022051405/586e7fed1a28aba0038b5095/html5/thumbnails/10.jpg)
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
![Page 11: SITSP Developers 2016 - ABAP c/ TDD](https://reader034.vdocument.in/reader034/viewer/2022051405/586e7fed1a28aba0038b5095/html5/thumbnails/11.jpg)
ABAP Unit: Executando o teste
• No Eclipse:
![Page 12: SITSP Developers 2016 - ABAP c/ TDD](https://reader034.vdocument.in/reader034/viewer/2022051405/586e7fed1a28aba0038b5095/html5/thumbnails/12.jpg)
ABAP Unit: Executando o teste
• No SAP GUI:
![Page 13: SITSP Developers 2016 - ABAP c/ TDD](https://reader034.vdocument.in/reader034/viewer/2022051405/586e7fed1a28aba0038b5095/html5/thumbnails/13.jpg)
ABAP Unit: Resultado da Execução
• Sucesso:
![Page 14: SITSP Developers 2016 - ABAP c/ TDD](https://reader034.vdocument.in/reader034/viewer/2022051405/586e7fed1a28aba0038b5095/html5/thumbnails/14.jpg)
ABAP Unit: Resultado da Execução
• Erro:
![Page 15: SITSP Developers 2016 - ABAP c/ TDD](https://reader034.vdocument.in/reader034/viewer/2022051405/586e7fed1a28aba0038b5095/html5/thumbnails/15.jpg)
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;
![Page 16: SITSP Developers 2016 - ABAP c/ TDD](https://reader034.vdocument.in/reader034/viewer/2022051405/586e7fed1a28aba0038b5095/html5/thumbnails/16.jpg)
ABAP Unit: Coverage Test
![Page 17: SITSP Developers 2016 - ABAP c/ TDD](https://reader034.vdocument.in/reader034/viewer/2022051405/586e7fed1a28aba0038b5095/html5/thumbnails/17.jpg)
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;
![Page 18: SITSP Developers 2016 - ABAP c/ TDD](https://reader034.vdocument.in/reader034/viewer/2022051405/586e7fed1a28aba0038b5095/html5/thumbnails/18.jpg)
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.
![Page 19: SITSP Developers 2016 - ABAP c/ TDD](https://reader034.vdocument.in/reader034/viewer/2022051405/586e7fed1a28aba0038b5095/html5/thumbnails/19.jpg)
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
![Page 20: SITSP Developers 2016 - ABAP c/ TDD](https://reader034.vdocument.in/reader034/viewer/2022051405/586e7fed1a28aba0038b5095/html5/thumbnails/20.jpg)
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;
![Page 21: SITSP Developers 2016 - ABAP c/ TDD](https://reader034.vdocument.in/reader034/viewer/2022051405/586e7fed1a28aba0038b5095/html5/thumbnails/21.jpg)
Test Seams & Test InjectionSimular acesso ao banco de dados
![Page 22: SITSP Developers 2016 - ABAP c/ TDD](https://reader034.vdocument.in/reader034/viewer/2022051405/586e7fed1a28aba0038b5095/html5/thumbnails/22.jpg)
Test Seams & Test InjectionDefinir Test Seam
![Page 23: SITSP Developers 2016 - ABAP c/ TDD](https://reader034.vdocument.in/reader034/viewer/2022051405/586e7fed1a28aba0038b5095/html5/thumbnails/23.jpg)
Test Seams & Test InjectionUsar o Test Injection
![Page 24: SITSP Developers 2016 - ABAP c/ TDD](https://reader034.vdocument.in/reader034/viewer/2022051405/586e7fed1a28aba0038b5095/html5/thumbnails/24.jpg)
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/
![Page 25: SITSP Developers 2016 - ABAP c/ TDD](https://reader034.vdocument.in/reader034/viewer/2022051405/586e7fed1a28aba0038b5095/html5/thumbnails/25.jpg)
Perguntas?
![Page 26: SITSP Developers 2016 - ABAP c/ TDD](https://reader034.vdocument.in/reader034/viewer/2022051405/586e7fed1a28aba0038b5095/html5/thumbnails/26.jpg)
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/