26
TDD com ABAP Por José Nunes

SITSP Developers 2016 - ABAP c/ TDD

Embed Size (px)

Citation preview

Page 1: SITSP Developers 2016 - ABAP c/ TDD

TDD com ABAPPor José Nunes

Page 2: SITSP Developers 2016 - ABAP c/ TDD

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

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

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

Disciplina

Page 6: SITSP Developers 2016 - ABAP c/ TDD

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

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

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

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

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

ABAP Unit: Executando o teste

• No Eclipse:

Page 12: SITSP Developers 2016 - ABAP c/ TDD

ABAP Unit: Executando o teste

• No SAP GUI:

Page 13: SITSP Developers 2016 - ABAP c/ TDD

ABAP Unit: Resultado da Execução

• Sucesso:

Page 14: SITSP Developers 2016 - ABAP c/ TDD

ABAP Unit: Resultado da Execução

• Erro:

Page 15: SITSP Developers 2016 - ABAP c/ TDD

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

ABAP Unit: Coverage Test

Page 17: SITSP Developers 2016 - ABAP c/ TDD

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

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

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

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

Test Seams & Test InjectionSimular acesso ao banco de dados

Page 22: SITSP Developers 2016 - ABAP c/ TDD

Test Seams & Test InjectionDefinir Test Seam

Page 23: SITSP Developers 2016 - ABAP c/ TDD

Test Seams & Test InjectionUsar o Test Injection

Page 24: SITSP Developers 2016 - ABAP c/ TDD

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

Perguntas?

Page 26: SITSP Developers 2016 - ABAP c/ TDD

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/