SlideShare a Scribd company logo
1 of 26
TDD com ABAP
Por 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 seus
mé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 teste
for 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, depois
que todos os métodos de teste foram executados;
Setup & Teardown
class lcl_contaBancaria_test definition
for testing
risk level harmless
duration 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 Injection
Simular acesso ao banco de dados
Test Seams & Test Injection
Definir Test Seam
Test Seams & Test Injection
Usar 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 Beck
https://www.amazon.com/Test-Driven-Development-By-
Example/dp/0321146530
• Test Driven Development by Robert Martin
https://www.youtube.com/watch?v=qmS4ojQ1Pa8
• Test Seams & Test Injection by Horst Keller
https://blogs.sap.com/2015/10/23/abap-news-for-750-test-seams-and-
injections/
• Introduction to CDS Test Doubles by Sunil Bandameedapalli
https://blogs.sap.com/2016/10/19/introduction-cds-test-double-
framework-write-unit-tests-abap-cds-entities/

More Related Content

What's hot

Aexo TI - Boas práticas de testes tdd
Aexo TI - Boas práticas de testes tddAexo TI - Boas práticas de testes tdd
Aexo TI - Boas práticas de testes tddCarlos Santana
 
Zend Framework Estrutura e TDD
Zend Framework Estrutura e TDDZend Framework Estrutura e TDD
Zend Framework Estrutura e TDDPHP Day Curitiba
 
Testes de Desempenho
Testes de DesempenhoTestes de Desempenho
Testes de DesempenhoSandy Maciel
 
Introdução aos Testes de Desempenho
Introdução aos Testes de DesempenhoIntrodução aos Testes de Desempenho
Introdução aos Testes de DesempenhoBase2 Tecnologia
 
Pensando em java univali turbinando seus testes
Pensando em java univali   turbinando seus testesPensando em java univali   turbinando seus testes
Pensando em java univali turbinando seus testesSandro Giacomozzi
 
Testes Automatizados de Software
Testes Automatizados de SoftwareTestes Automatizados de Software
Testes Automatizados de SoftwareMaurício Aniche
 
Testes de unidade alem do basico
Testes de unidade alem do basicoTestes de unidade alem do basico
Testes de unidade alem do basicoIsmael
 

What's hot (8)

Aexo TI - Boas práticas de testes tdd
Aexo TI - Boas práticas de testes tddAexo TI - Boas práticas de testes tdd
Aexo TI - Boas práticas de testes tdd
 
Zend Framework Estrutura e TDD
Zend Framework Estrutura e TDDZend Framework Estrutura e TDD
Zend Framework Estrutura e TDD
 
Testes de Desempenho
Testes de DesempenhoTestes de Desempenho
Testes de Desempenho
 
TDD na Prática
TDD na PráticaTDD na Prática
TDD na Prática
 
Introdução aos Testes de Desempenho
Introdução aos Testes de DesempenhoIntrodução aos Testes de Desempenho
Introdução aos Testes de Desempenho
 
Pensando em java univali turbinando seus testes
Pensando em java univali   turbinando seus testesPensando em java univali   turbinando seus testes
Pensando em java univali turbinando seus testes
 
Testes Automatizados de Software
Testes Automatizados de SoftwareTestes Automatizados de Software
Testes Automatizados de Software
 
Testes de unidade alem do basico
Testes de unidade alem do basicoTestes de unidade alem do basico
Testes de unidade alem do basico
 

Viewers also liked

Test Driven Development (TDD)
Test Driven Development (TDD)Test Driven Development (TDD)
Test Driven Development (TDD)David Ehringer
 
TDD - Pós Graduação em Engenharia de Software Ágil
TDD - Pós Graduação em Engenharia de Software ÁgilTDD - Pós Graduação em Engenharia de Software Ágil
TDD - Pós Graduação em Engenharia de Software ÁgilBruno Eustáquio
 
Test Driven Development (TDD) para seres humanos.
Test Driven Development (TDD) para seres humanos.Test Driven Development (TDD) para seres humanos.
Test Driven Development (TDD) para seres humanos.Rômulo Augusto Santos
 
TDD And Refactoring
TDD And RefactoringTDD And Refactoring
TDD And RefactoringNaresh Jain
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven DevelopmentTung Nguyen Thanh
 
Test-Driven Development (TDD)
Test-Driven Development (TDD)Test-Driven Development (TDD)
Test-Driven Development (TDD)Brian Rasmussen
 

Viewers also liked (10)

Test Driven Development (TDD)
Test Driven Development (TDD)Test Driven Development (TDD)
Test Driven Development (TDD)
 
TDD - Pós Graduação em Engenharia de Software Ágil
TDD - Pós Graduação em Engenharia de Software ÁgilTDD - Pós Graduação em Engenharia de Software Ágil
TDD - Pós Graduação em Engenharia de Software Ágil
 
TDD para Java EE
TDD para Java EETDD para Java EE
TDD para Java EE
 
Test Driven Development (TDD) para seres humanos.
Test Driven Development (TDD) para seres humanos.Test Driven Development (TDD) para seres humanos.
Test Driven Development (TDD) para seres humanos.
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
TDD And Refactoring
TDD And RefactoringTDD And Refactoring
TDD And Refactoring
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
Pensando TDD
Pensando TDDPensando TDD
Pensando TDD
 
Test-Driven Development (TDD)
Test-Driven Development (TDD)Test-Driven Development (TDD)
Test-Driven Development (TDD)
 
TDD - Agile
TDD - Agile TDD - Agile
TDD - Agile
 

Similar to TDD com ABAP - Testes Unitários e ABAP Unit

O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...Isaac de Souza
 
Testando aplicações DataSnap
Testando aplicações DataSnapTestando aplicações DataSnap
Testando aplicações DataSnapAndreano Lanusse
 
Testes de unidade - RP Tec Com
Testes de unidade - RP Tec ComTestes de unidade - RP Tec Com
Testes de unidade - RP Tec ComIgor Rozani
 
6. apresentacao rp tec com 2018 igor rozani e felipe muniz
6. apresentacao rp tec com 2018 igor rozani e felipe muniz6. apresentacao rp tec com 2018 igor rozani e felipe muniz
6. apresentacao rp tec com 2018 igor rozani e felipe munizMatheus de Lara Calache
 
Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Diego Pacheco
 
Minicurso - Teste de software (CACSI 2015)
Minicurso - Teste de software (CACSI 2015)Minicurso - Teste de software (CACSI 2015)
Minicurso - Teste de software (CACSI 2015)Vanilton Pinheiro
 
TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"Cesar Romero
 
Mule esb teste parte 1
Mule esb teste   parte 1Mule esb teste   parte 1
Mule esb teste parte 1Jeison Barros
 
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...Claudinei Brito Junior
 
Android: testes automatizados e TDD
Android: testes automatizados e TDDAndroid: testes automatizados e TDD
Android: testes automatizados e TDDDextra
 
Introdução a Automação de Teste de Software
Introdução a Automação de Teste de SoftwareIntrodução a Automação de Teste de Software
Introdução a Automação de Teste de SoftwareCamilo Ribeiro
 
Qualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitQualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitDomingos Teruel
 

Similar to TDD com ABAP - Testes Unitários e ABAP Unit (20)

Unit Testing
Unit TestingUnit Testing
Unit Testing
 
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
 
TDD com Python (Completo)
TDD com Python (Completo)TDD com Python (Completo)
TDD com Python (Completo)
 
Apresentação testes white box
Apresentação testes white boxApresentação testes white box
Apresentação testes white box
 
Testando aplicações DataSnap
Testando aplicações DataSnapTestando aplicações DataSnap
Testando aplicações DataSnap
 
Testes de unidade - RP Tec Com
Testes de unidade - RP Tec ComTestes de unidade - RP Tec Com
Testes de unidade - RP Tec Com
 
6. apresentacao rp tec com 2018 igor rozani e felipe muniz
6. apresentacao rp tec com 2018 igor rozani e felipe muniz6. apresentacao rp tec com 2018 igor rozani e felipe muniz
6. apresentacao rp tec com 2018 igor rozani e felipe muniz
 
Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1
 
Minicurso - Teste de software (CACSI 2015)
Minicurso - Teste de software (CACSI 2015)Minicurso - Teste de software (CACSI 2015)
Minicurso - Teste de software (CACSI 2015)
 
Test-Driven Development
Test-Driven DevelopmentTest-Driven Development
Test-Driven Development
 
TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"
 
Introdução ao design de teste de software
Introdução ao design de teste de softwareIntrodução ao design de teste de software
Introdução ao design de teste de software
 
Mule esb teste parte 1
Mule esb teste   parte 1Mule esb teste   parte 1
Mule esb teste parte 1
 
O que é Teste de Software?
O que é Teste de Software?O que é Teste de Software?
O que é Teste de Software?
 
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
 
Android: testes automatizados e TDD
Android: testes automatizados e TDDAndroid: testes automatizados e TDD
Android: testes automatizados e TDD
 
Plano de teste
Plano de testePlano de teste
Plano de teste
 
Plano de teste
Plano de testePlano de teste
Plano de teste
 
Introdução a Automação de Teste de Software
Introdução a Automação de Teste de SoftwareIntrodução a Automação de Teste de Software
Introdução a Automação de Teste de Software
 
Qualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitQualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnit
 

More from Jose Nunes

SAP Data Analysis + Tableau
SAP Data Analysis + TableauSAP Data Analysis + Tableau
SAP Data Analysis + TableauJose Nunes
 
Insights sobre E-Commerce e Hybris Commerce
Insights sobre E-Commerce e Hybris CommerceInsights sobre E-Commerce e Hybris Commerce
Insights sobre E-Commerce e Hybris CommerceJose Nunes
 
Automação de Testes Funcionais com SAP CBTA
Automação de Testes Funcionais com SAP CBTAAutomação de Testes Funcionais com SAP CBTA
Automação de Testes Funcionais com SAP CBTAJose Nunes
 
TDF by S/4 HANA
TDF by S/4 HANATDF by S/4 HANA
TDF by S/4 HANAJose Nunes
 
Sobrevivendo às mudanças legais da NF-e
Sobrevivendo às mudanças legais da NF-eSobrevivendo às mudanças legais da NF-e
Sobrevivendo às mudanças legais da NF-eJose Nunes
 
Implementação SAP S/4 HANA Finance
Implementação SAP S/4 HANA FinanceImplementação SAP S/4 HANA Finance
Implementação SAP S/4 HANA FinanceJose Nunes
 
SAP Strategy - A Perspective for Products and Solutions
SAP Strategy - A Perspective for Products and SolutionsSAP Strategy - A Perspective for Products and Solutions
SAP Strategy - A Perspective for Products and SolutionsJose Nunes
 
SPED ECF on HANA/TDF
SPED ECF on HANA/TDFSPED ECF on HANA/TDF
SPED ECF on HANA/TDFJose Nunes
 
Desenvolvimento SAP UI5 usando Neptune
Desenvolvimento SAP UI5 usando NeptuneDesenvolvimento SAP UI5 usando Neptune
Desenvolvimento SAP UI5 usando NeptuneJose Nunes
 
Como migrar para S/4 HANA
Como migrar para S/4 HANAComo migrar para S/4 HANA
Como migrar para S/4 HANAJose Nunes
 
Design de Negócios com IoT
Design de Negócios com IoTDesign de Negócios com IoT
Design de Negócios com IoTJose Nunes
 
Mudanças da NF-e/CT-e em 2017
Mudanças da NF-e/CT-e em 2017Mudanças da NF-e/CT-e em 2017
Mudanças da NF-e/CT-e em 2017Jose Nunes
 
Soluções Fiscais SAP
Soluções Fiscais SAPSoluções Fiscais SAP
Soluções Fiscais SAPJose Nunes
 
Conheça o Cloud Foundry no HCP
Conheça o Cloud Foundry no HCPConheça o Cloud Foundry no HCP
Conheça o Cloud Foundry no HCPJose Nunes
 
SAP HANA Express Edition
SAP HANA Express EditionSAP HANA Express Edition
SAP HANA Express EditionJose Nunes
 
SAP HANA Cloud Platform - Portal Service
SAP HANA Cloud Platform - Portal ServiceSAP HANA Cloud Platform - Portal Service
SAP HANA Cloud Platform - Portal ServiceJose Nunes
 
Keynote - SITSP 2016 - Marssel Vilaça
Keynote - SITSP 2016 - Marssel VilaçaKeynote - SITSP 2016 - Marssel Vilaça
Keynote - SITSP 2016 - Marssel VilaçaJose Nunes
 
Keynote - SITSP 2016 - Raquel Cunha
Keynote - SITSP 2016 - Raquel CunhaKeynote - SITSP 2016 - Raquel Cunha
Keynote - SITSP 2016 - Raquel CunhaJose Nunes
 
SOS Predictive Analytics
SOS Predictive AnalyticsSOS Predictive Analytics
SOS Predictive AnalyticsJose Nunes
 

More from Jose Nunes (20)

SAP Data Analysis + Tableau
SAP Data Analysis + TableauSAP Data Analysis + Tableau
SAP Data Analysis + Tableau
 
Insights sobre E-Commerce e Hybris Commerce
Insights sobre E-Commerce e Hybris CommerceInsights sobre E-Commerce e Hybris Commerce
Insights sobre E-Commerce e Hybris Commerce
 
Automação de Testes Funcionais com SAP CBTA
Automação de Testes Funcionais com SAP CBTAAutomação de Testes Funcionais com SAP CBTA
Automação de Testes Funcionais com SAP CBTA
 
TDF by S/4 HANA
TDF by S/4 HANATDF by S/4 HANA
TDF by S/4 HANA
 
Sobrevivendo às mudanças legais da NF-e
Sobrevivendo às mudanças legais da NF-eSobrevivendo às mudanças legais da NF-e
Sobrevivendo às mudanças legais da NF-e
 
Implementação SAP S/4 HANA Finance
Implementação SAP S/4 HANA FinanceImplementação SAP S/4 HANA Finance
Implementação SAP S/4 HANA Finance
 
SAP Strategy - A Perspective for Products and Solutions
SAP Strategy - A Perspective for Products and SolutionsSAP Strategy - A Perspective for Products and Solutions
SAP Strategy - A Perspective for Products and Solutions
 
Bloco K
Bloco KBloco K
Bloco K
 
SPED ECF on HANA/TDF
SPED ECF on HANA/TDFSPED ECF on HANA/TDF
SPED ECF on HANA/TDF
 
Desenvolvimento SAP UI5 usando Neptune
Desenvolvimento SAP UI5 usando NeptuneDesenvolvimento SAP UI5 usando Neptune
Desenvolvimento SAP UI5 usando Neptune
 
Como migrar para S/4 HANA
Como migrar para S/4 HANAComo migrar para S/4 HANA
Como migrar para S/4 HANA
 
Design de Negócios com IoT
Design de Negócios com IoTDesign de Negócios com IoT
Design de Negócios com IoT
 
Mudanças da NF-e/CT-e em 2017
Mudanças da NF-e/CT-e em 2017Mudanças da NF-e/CT-e em 2017
Mudanças da NF-e/CT-e em 2017
 
Soluções Fiscais SAP
Soluções Fiscais SAPSoluções Fiscais SAP
Soluções Fiscais SAP
 
Conheça o Cloud Foundry no HCP
Conheça o Cloud Foundry no HCPConheça o Cloud Foundry no HCP
Conheça o Cloud Foundry no HCP
 
SAP HANA Express Edition
SAP HANA Express EditionSAP HANA Express Edition
SAP HANA Express Edition
 
SAP HANA Cloud Platform - Portal Service
SAP HANA Cloud Platform - Portal ServiceSAP HANA Cloud Platform - Portal Service
SAP HANA Cloud Platform - Portal Service
 
Keynote - SITSP 2016 - Marssel Vilaça
Keynote - SITSP 2016 - Marssel VilaçaKeynote - SITSP 2016 - Marssel Vilaça
Keynote - SITSP 2016 - Marssel Vilaça
 
Keynote - SITSP 2016 - Raquel Cunha
Keynote - SITSP 2016 - Raquel CunhaKeynote - SITSP 2016 - Raquel Cunha
Keynote - SITSP 2016 - Raquel Cunha
 
SOS Predictive Analytics
SOS Predictive AnalyticsSOS Predictive Analytics
SOS Predictive Analytics
 

TDD com ABAP - Testes Unitários e ABAP Unit

  • 1. TDD com ABAP Por José Nunes
  • 2. 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
  • 3. 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
  • 4. 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;
  • 6. 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 seus métodos • Testes unitários devem ser: • Independentes • Isolados • Concisos • Testes unitários são baseados em afirmações (assertions)
  • 7. Benefícios • Feedback mais rápido • Reduz tempo de debug • Reduz retrabalho • Modularização • Qualidade • Segurança nas alterações • Confiança no deploy
  • 8. 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
  • 9. ABAP Unit: Classe de Teste – Definição class lcl_class_test definition "indica que a classe é de teste for 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.
  • 10. 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
  • 11. ABAP Unit: Executando o teste • No Eclipse:
  • 12. ABAP Unit: Executando o teste • No SAP GUI:
  • 13. ABAP Unit: Resultado da Execução • Sucesso:
  • 14. ABAP Unit: Resultado da Execução • Erro:
  • 15. 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;
  • 17. 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, depois que todos os métodos de teste foram executados;
  • 18. Setup & Teardown class lcl_contaBancaria_test definition for testing risk level harmless duration 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.
  • 19. 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
  • 20. 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;
  • 21. Test Seams & Test Injection Simular acesso ao banco de dados
  • 22. Test Seams & Test Injection Definir Test Seam
  • 23. Test Seams & Test Injection Usar o Test Injection
  • 24. 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/
  • 26. Referências: • Test Driven Development – By Example – by Kent Beck https://www.amazon.com/Test-Driven-Development-By- Example/dp/0321146530 • Test Driven Development by Robert Martin https://www.youtube.com/watch?v=qmS4ojQ1Pa8 • Test Seams & Test Injection by Horst Keller https://blogs.sap.com/2015/10/23/abap-news-for-750-test-seams-and- injections/ • Introduction to CDS Test Doubles by Sunil Bandameedapalli https://blogs.sap.com/2016/10/19/introduction-cds-test-double- framework-write-unit-tests-abap-cds-entities/

Editor's Notes

  1. É bom ser bom no debug? Programação orientada ao medo: porque tememos mudanças no código? Don’t live with broken windows TDD p/ novos desenvolvimentos Documentação através do código: código que documenta o código TDD e acesso a BD;
  2. Feedback Rapido = TDD permite que o desenvolvedor tenha uma resposta ou retorno mais rápido ao codificar e executar os testes. Reduz tempo de Debug porque teremos menos erros, já que a aplicação é testada antes mesmo de ser desenvolvida Reduz retrabalho por diminuir a quantidade de problemas durante o desenvolvimento, assim como pelo design simplificado das mesmas Modularização, seguindo o conceito SOLID, SRP – Single Responsibility Principle – cada classe e método terá apenas uma função específica – You Have One Job Qualidade – Mais testes garantem uma maior qualidade da aplicação sendo desenvolvida Segurança na Alteração – Os testes funcionam como uma rede de segurança ao fazer qualquer alteração. Você consegue rápidamente descobrir se sua alteração ”quebrou” algum outro ponto da aplicação ou gerou algum tipo de regressão; Confiança no deploy – Erros ainda podem existir, mesmo após a execução com sucesso dos testes unitários, mas com certeza o seu número será reduzido, com menos chance de encontrar erros simples ou de funcionalidade não conforme a especificação e com isso, maior confiança na hora do deploy (ou transporte p/ qualidade/produção).
  3. xUnit é o conjunto de testes unitários de diversas linguagens de programação que são baseados no SUnit, framework de testes unitários desenvolvido por Kent Beck para SmallTalk. Após o SmallTalk, ele foi portado pelo Kent Beck e Erich Gamma p/ Java, dando origem ao JUnit.
  4. Risk Level indica o risco que a classe de testes representa ao sistema. Com isso, o teste pode ou não ser executado, baseado em parâmetro da instância do sistema Duration indica se teste é executado de forma rápida ou demorada. Métodos de teste são gerados e executados apenas em sistemas não produtivos, onde o parâmetro de profile abap/test_generation é true