SlideShare uma empresa Scribd logo
1 de 55
Baixar para ler offline
Automatizando
           em quatro passos


   TESTES
                              @helmedeiros
1. Conhecimentos básicos de testes
2. Cobertura de testes com Emma
3. Desenvolvendo testes unitários com JUnit
4. Testes unitários com objetos dubles usando mockito
Conhecimentos básicos de testes
quanto
maior




estresse          menor




     menor
             execução
             de testes

                            Gerry Weinberg
                          diagrama de influência
valiar”
           ifica “a                    m maior


    ar sign em produção o
                          estresse é b
                                      e



test
Top Down de aceitação...
   cenários de teste... critérios


                Bottom up box...
                   22 caixas de texto... 15 combo
FIZ
uma mu
    dança


                          QUEBROU UMA PARTE QUE NÃ
                          DEVIA                   O




             TEST - Teste Isolado
    ISOLATED
                    pida;     deve ser rá
     1.A execuçã o dos testes
                                  eve ignorar as demais;
     2. A execução d e um teste d

                                                                                     Kent Beck
                                                           TDD - Desenvolvimento Guiado por Testes
alta éCOESÃO um módulo
              a medida da força relativa de


fraco ACOPLAMENTO módulos
         é o nível de interdependência entre os
TESTEI
meu código




                                         O que m ais deveria
                                               testar?


           - Lista de testes
 TEST LIST                                                        ue precisa im  plementar;
                                        perações que  você sabe q
                  ista ex emplos das o                         erência nula;
 1.Coloque na l                     coloque a ve  rsão de conf
                                                                              ar o código.
                   implementa   das                             zer para limp
 2 .Para todas já                    e você acha que terá de fa
        te todas as re fatorações qu
  3.Lis                                                                                                                 Kent Beck
                                                                                              TDD - Desenvolvimento Guiado por Testes
1. Qual o conjunto de testes, que quando passarem, demonstrará que o
código que estamos confiantes que irá calcular o relatório
corretamente?




                                             $5 + 10 CHF = $10 se a taxa é 2:1
                                             $5 * 2 = $10

                                             Tornar a “quantidade” privada
                                             Efeitos colaterais em Dollar?
                                             Arredondamento de dinheiro?




                                                                                              Kent Beck
                                                                    TDD - Desenvolvimento Guiado por Testes
ESCREVI
meu código


                            QUANDO EU DEVO ESCREVER
                            MEUS TESTES?




             RST - Teste primeiro
      TEST FI
        .Primeiro escreva  os testes;                        ontrolado;
      1                                          e designe c
                        a o código c om o escopo
      2.D  epois escrev
                                                                                                    Kent Beck
                                                                          TDD - Desenvolvimento Guiado por Testes
ESCREVI
meu teste


        COMO EU FOCO A FUNCIONALI
        TESTE ?                  DADE E NÃO NO




                               serção primeiro
               ST - Defina a as
     ASSERT FIR
                                                      ando o código estiver certo;
                         a a asserção q ue passará qu
      1.Pr imeiro escrev                          pendências;
                     lva de baixo p ara cima as de
      2.Depois reso

                                                                                                               Kent Beck
                                                                                     TDD - Desenvolvimento Guiado por Testes
Quando eu testo definindo uma asserção primeiro, defino como
reversa a minha lógica de construção, resolvendo um problema por
vez.




                                                               De onde a resposta vem? Do socket, certamente:
Quando pronto o socket deve estar fechado e deveríamos


                                                                                                                2
                                     ter lido a string abc



1
                                                             Mas, antes disso, precisamos abrir o servidor:
   E o socket? Nós o criamos conectando ao servidor:




 3                                                                                                              4
                                                                                                                        Kent Beck
                                                                                              TDD - Desenvolvimento Guiado por Testes
ESCREVI
meu teste


                                A ORDEM DOS PARÂMETROS
                                IMPORTA?




            TA - Dados de teste
     TEST DA
                                  stes fáceis de ler e seguir;
           dados que faça m os te                                   ença use dado s diferentes;
     1.Use
                                    etros de cham   ada fizer difer
     2.Quando a or dem dos parâm

                                                                                                                Kent Beck
                                                                                      TDD - Desenvolvimento Guiado por Testes
ESCREVI
meu teste


                                O QUE SIGNIFICA NO SEGUNDO
                                PARÂMETRO O VALOR 3?




               TA - Dados evidentes
     EVIDENT DA
                m qual o objet ivo do dado;
      1.Pense e                                    te objetivo;
                      constante que transpareça es
      2.Defina uma                           vezes para cas  os diferentes.
              ilize a mesma   constante duas
      *Não ut
                                                                                                        Kent Beck
                                                                              TDD - Desenvolvimento Guiado por Testes
Todos os parâmetros de um método devem ser claros enquanto as
suas intenções, assim como deve ser sua utilização. Devemos SEMPRE
evidenciar o objetivo de cada valor.




         Constantes com o mesmo valor são diferidas pelo nome da constante.



1
                               O nome da constante diferencia os significados/intenções de cada parâmetro dentro da requisição e por conseguinte as cenário de teste.



                 2
                                                                                                                                                                         Caelum
                                                                                                                                           FJ-16: Laboratório Java com Testes, XML
TDD       ento guiado por testes
Desenvolvim



        1   quais as soluções para o problema?

                                                      qual o primeiro cenário que desejo resolver?   2
  n++
            3        qual o próximo cenário?


                                          RESOLVIDO
                                                           X
er um  prob lema
      escolh
           m teste que fa lhe!
escrever u


red
rápido possível!
       le passar o mais
fazer e


     green
r que está bom!
         fatorar até acha
depois re


        yello
NOSSO PROBLEMA
     FizzBuzz
1
                                 2
                               Fizz




                        {
                                4
                              Buzz
      dada uma                 Fizz
lista de 1 a 100                7
    múltiplos de 3              8
    múltiplos de 5             Fizz
   múltiplos de 3 e 5
                              Buzz
                                 11
                               Fizz
                                13
                                14
                            FizzBuzz
Cobertura de testes com Emma
verage
test cocobertura de testes




   é qualquer medida de abrangência relacionada a um requisito ou a
   um critério de design/implementação do código, como a verificação
   de casos de uso ou execução de todas as linhas de código.
ENCONTRAR
                               código não testado



       verage
test co
     cobertur
             a de test
                      es




                                     GARANTIR
                           X       qualidade do código
statement coverage
             se detêm ao simples registro sobre quais linhas foram executadas.


multiple conditions coverage
  mede cada condição lógica no código avaliando se existem cenários não testados.
código
   original



       Instrumentação                                 código
                                                            avaliado
multiple conditions coverage
  mede cada condição lógica no código avaliando se existem cenários não testados.
                                              execução
                                              dos testes
Instrumentação
 A ferramenta de cobertura modifica o código para registrar quais
 expressões avaliar em qual caminho.

  Esta modificação pode ser feita tanto para o código-fonte quanto para o executável que o compilador gera.
     Se for feito de código-fonte, a maioria das ferramentas não alteram a fonte original, em vez disso, eles
     modificam uma cópia que é então passada para o compilador de uma maneira que faz parecer que é o
     original.
multiple conditions coverage
  mede cada condição lógica no código avaliando se existem cenários não testados.
     Após a instrumentação, você deve executar vários testes, acumulando resultados de cobertura em alguns log.
Códigos com condições lógicas são instrumentados, e após a execução
são apresentados logs que descrevem dentre as possíveis condições
quais não foram testadas.




                     Código limpo, com condições lógicas:       Código testado, com diferentes logs para as condições lógicas:



  1                                                         2
 multiple conditions coverage
   mede cada condição lógica no código avaliando se existem cenários não testados.
EclEMMA para o Eclipse.
  ferramenta de cobertura de código


     JaCoCode cobertura de código para Java.
JaCoCo é uma biblioteca livre
A execução de testes e cobertura não devem ser deixado para a fase de
build e deploy, nem muito menos serem restritas as ferramentas de
continuous deployment, todo desenvolvedor deve ser capaz de
executar quantas vezes necessário antes de comitar seu código.


                           EclEMMA
                                        1


                             2                                      3
Cada execução da bateria de testes e cobertura de seu código realizada
pelo eclipse lhe conduzirá a um novo cenário de testes. Para cada
cenário avalie o resultado esperado e crie um novo teste para
aumentar a cobertura sob o aspecto.

                                                               2
                         1EclEMMA                                  Execute a bateria de testes de
                                                                cobertura apertando no nome do
                         O que o seu código devera fazer?                   método ou da classe.
                         Liste os cenários e em seguida as
                           asserções para cada um destes.




                                                                     Analise o relatório e veja oque
                                                                           ainda falta ser avaliado.



                                                              3
Scripts de execução de testes e de cobertura são abstrações menores, e
desta forma devem ser preferíveis a grandes alterações ou escolhas
estruturais. O JaCoCo e o Emma são excelentes e enxutas bibliotecas
para execução na maquina dos desenvolvedores e serviços de deploy.

                                 1
                                   Criar targets para executar testes
                                  no junit, com apontamentos para
                                              os arquivos do emma.




                                 JaCoCo
                                                                        3
                     2                                                    Criar target para criação dos
                                                                        reports baseados nos arquivos
                                                                          gerados após a execução dos
 Criar target para execução da                                                                   testes.
 instrumentação pelo emma.
A execução de testes e cobertura devem ser repetidos na fase de build
e deploy, com o apoio das ferramentas de continuous deployment,
todo membro da equipe deve saber como está a qualidade e a
confiança no código entregue com métricas acionáveis, acessíveis e
auditáveis.




                             JaCoCo
A execução de testes e cobertura devem ser repetidos na fase de build
e deploy, com o apoio das ferramentas de continuous deployment,
todo membro da equipe deve saber como está a qualidade e a
confiança no código entregue com métricas acionáveis, acessíveis e
auditáveis.




   Gráficos de cobertura de testes, especificos por build,
                                 detalhados em pacotes.
                                                             JaCoCo
NOSSO PROBLEMA
          FizzBuzz ESTES)
   (COBERTUR A DE T
1
                                 2
                               Fizz




                        {
                                4
                              Buzz
      dada uma                 Fizz
lista de 1 a 100                7
    múltiplos de 3              8
    múltiplos de 5             Fizz
   múltiplos de 3 e 5
                              Buzz
                                 11
                               Fizz
                                13
                                14
                            FizzBuzz
Desenvolvendo testes unitários com JUnit
itário
 este un         re uma classe
T      apenas sob




   Um teste de unitário é um pedaço de código (normalmente uma
   classe) que chama um outro pedaço de código e verifica a exatidão de
   alguns pressupostos. Se os pressupostos estiverem errados, o teste de
   unidade falha.
Relatório
                                                                                                                                   X                sucessos
                                                          teste fixture                                                             Y                falhas

                                                                                                                                   Z                 erros
                 teste unitário                                      teste unitário

                   test case      test case   test case                                                                executar
                                                                                      teste fixture
                    test case     test case   test case
                                                                          test case     test case    test case
                    test case     test case   test case                   test case     test case    test case
                    test case     test case   test case                                                                           test runner

Suite de Teste




                                                                                                            executar
JUnit
  este runner
 t




   O JUnit é um framework open-source, criado por Erich Gamma e Kent
   Beck, com suporte à criação de testes automatizados na linguagem de
   programação Java.
A razão pela qual usamos testes em métodos ágeis é para que
tenhamos especificações executáveis, adequadas sobre o que está
sendo desenvolvido. Essas especificações devem falar sobre o que uma
unidade faz, não sobre como ele executa suas tarefas.



  •assertEquals(expected, actual)                                  •assertNotNull(Object object)
  •assertEquals(String message, expected, actual)                  •assertNotNull(String message, Object object)
  •assertSame(Object expected, Object actual)                      •assertTrue(String message, boolean condition)
  •assertSame(String message, Object expected, Object actual)      •assertTrue(boolean condition)
  •assertNotSame(Object expected, Object actual)                   •assertFalse(String message, boolean condition)
  •assertNotSame(String message, Object expected, Object actual)   •assertFalse(boolean condition)
  •assertNull(Object object)                                       •fail()
  •assertNull(String message, Object object)                       •fail(String message)
A elaboração dos cenários de teste envolvem a reflexão lógica, ou a
evolução na forma de sincronizar fixtures que devem ser
sincronizados tendo em mente o ciclo de execução dos testes.



          @BeforeClass

                         @Before

                                   TEST CASE

                                                        @After

                                                                     @AfterClass




   @Before                                     @AfterClass
   @BeforeClass                                @Ignore
   @After                                      @Test(expected=...)
Comumente um conjunto de testes unitários devem ser executados em
conjunto, seja devido a considerações enquanto ao raio de danos que
uma alteração possa causar ou sentido funcional. Para isso usamos as
Suites de teste.


                                1
                Crie uma JUnit Test Suite
            nomeando-a apropriadamente
                                                                3
                                                                     Execute a suite de testes, e
                                                               analise o conjunto dos relatórios.




                                 Suite de testes
                    2
                                Defina a estratégia de
                          agrupamento e quais são as
                       classes que fazem parte deste.
Maior parte do tempo você estará criando objetos que supram e
especifiquem suas necessidades para seus casos de teste. Quando
acontecer utilize Builders|ObjectMother como formas de especificar
apenas o necessário.




                                         fixtures
                             1               2                                   3
                                                                                 Utilize os builders para tornar
             Crie uma JUnit Test Suite        Crie uma classe Builder para seu      mais legível cada uma das
         nomeando-a apropriadamente                                    objeto.                          opções.
“Métodos estáticos dificultam a escrita de testes de unidade. Para
 resolver isso podemos: evitar a escrita de métodos estáticos, ou criar
 abstrações que escondem esses métodos. Nao é feio criar abstrações
 como a Relogio; feio é não testar!”                    http://www.aniche.com.br/




                                                                     1                           2
                                             encontre locais onde você utiliza                           Defina uma interface a ser
                                             métodos estáticos que precisam                      utilizada no sistema em seu lugar
                                            ser simulados para seus casos de
                                                                       teste.

           testando métodos estáticos
                                                                                                      4
                                                                                                               Injete o objeto com o


                                                               3
                                                                                                         comportamento que retorne
                                                                                                       como hoje o valor desejado


                                                              Declare o campo em sua classe e
                                                               em seguida substitua o mesmo
                                                             pelas antigas chamadas estáticas.
http://www.aniche.com.br/2011/09/testando-datas-e-metodos-estaticos/
Um erro sem mensagem, ou sem referencias aninhadas pode ser uma
pedra no sapato. Desta forma tratar exceções na maior parte das vezes
deve estar relacionada as mensagens retornadas, assim como o tipo de
erro.
                                                                                   1
                                                           encontre locais onde você utiliza
                                                           métodos estáticos que precisam
                                                          ser simulados para seus casos de
                                                                                     teste.




               tratando exceções
                                                                   2         Defina apenas a exceção
                                                                          esperada no bloco try catch.
                                                                             Manter throw da exceção
                                                                      recebida. E adicionar assert para
                                                                                          mensagem.
NOSSO PROBLEMA
               Frutas ctMother)
           uilders e Obje
  (JUnit, B
Testes unitários com objetos dubles usando mockito
ubmmy
        Dbofake e dules
    Test s,   mocks, stu




        Muitas vezes objetos sob teste dependem de outros objetos, sobre os
        quais não temos nenhum controle (as vezes nem funcionam ainda).
        Neste caso usamos os dublês de teste, quaisquer objetos falsos,
        utilizado no lugar de um objeto real, com propósitos de teste.



“There is no object-oriented problem that cannot be solved by adding a layer of indirection, except, of course, too many layers of indirection.”
stub não quebram teste quando não chamados.
objetos que possuem respostas pré-configuradas,

                                                 mockquando não chamados.
  objetos que esperam ser acionados de uma forma específica, falham
Muitas vezes, precisamos que nossa classe de teste se comporte de uma
determinada maneira, com pontos de verificação temporários, ou
ainda com uma implementação que não faz sentido em produção.
Durante os testes usará acesso ao filesystem ao invés de base de dados.




                                                          1                        2
                                                                                   Devemos criar uma interface para
                quando verificarmos um objeto a ser testado, ou
                                                                                     o mesmo e substituí-lo por sua

                             comportamento, apenas de estado.
                                                              stubs
                  auxiliar que não necessitar uma verificação de
                                                                                                   implementação.




                                                                      3
                                                                      Criar uma implementação com o
                                                                           comportamento desejado, e
                                                                                          esperado.
Muitas vezes precisamos verificar o comportamento de um objeto
principal ou auxiliar em uma dada funcionalidade. Para estes casos o
mais indicado é a utilização dos MOCKS.




1
                                                       mocks
     quando verificarmos um objeto a ser testado, ou
          auxiliar que necessitar uma verificação de
                                   comportamento.



                                                               Devemos criar um mock para o
                                                                                   mesmo.
                                                                                              2
3          Devemos verificar o
    comportamento do mesmo.
Mockito é um framework de mocking, que permite escrever testes
bonitos com API limpa e simples.


  •Cria Mocks de classes concretas assim como interfaces;
  •Anotações com syntax sugar; (@Mock)
  •Verificação dos erros é simplificada;
  •Suporta a verificação do exato numero assim como no mínimo um acesso de método;
  •Possuí verificação ou stub simplificado e flexível com utilização de matchers
   (anyObject(), anyString() ou refEq());
  •Permite a criação de matchers customizados para argumentos usando hamcrest;

Mais conteúdo relacionado

Mais procurados

TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do MantraDionatan default
 
BDD - JBehave + SeleniumHQ + PhantomJS + Fixture Factory
BDD - JBehave + SeleniumHQ + PhantomJS  + Fixture FactoryBDD - JBehave + SeleniumHQ + PhantomJS  + Fixture Factory
BDD - JBehave + SeleniumHQ + PhantomJS + Fixture FactoryAndre Vinicius Buzzo
 
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
 
TDC 2012 TDD e 20 coisas que você precisa saber
TDC 2012 TDD e 20 coisas que você precisa saberTDC 2012 TDD e 20 coisas que você precisa saber
TDC 2012 TDD e 20 coisas que você precisa saberCamilo Lopes
 
Tdd not sure if testing or developing
Tdd  not sure if testing or developingTdd  not sure if testing or developing
Tdd not sure if testing or developingRenato Oliveira
 
TDD direto das trincheiras
TDD direto das trincheirasTDD direto das trincheiras
TDD direto das trincheirasLuiz Borba
 
Seja Um Programador Pragmatico
Seja Um Programador PragmaticoSeja Um Programador Pragmatico
Seja Um Programador PragmaticoLeonardo Fernandes
 
Apresentacao tdc 2012
Apresentacao tdc 2012Apresentacao tdc 2012
Apresentacao tdc 2012Jorge Oleques
 
Código Limpo: Testes de Unidade Capítulo 09
Código Limpo: Testes de Unidade Capítulo 09 Código Limpo: Testes de Unidade Capítulo 09
Código Limpo: Testes de Unidade Capítulo 09 Inael Rodrigues
 
Boas práticas no desenvolvimento de software através do uso de TDD
Boas práticas no desenvolvimento de software através do uso de TDDBoas práticas no desenvolvimento de software através do uso de TDD
Boas práticas no desenvolvimento de software através do uso de TDDJony Ferreira dos Santos
 
Tdd direto das trincheiras
Tdd direto das trincheirasTdd direto das trincheiras
Tdd direto das trincheirasScumpb
 
Treinamento TDD - Atech
Treinamento TDD - AtechTreinamento TDD - Atech
Treinamento TDD - Atechcesarcneto
 
TDD - A Verdadeira Face do Teste
TDD - A Verdadeira Face do TesteTDD - A Verdadeira Face do Teste
TDD - A Verdadeira Face do TesteAislan Fernandes
 

Mais procurados (20)

TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do Mantra
 
BDD - JBehave + SeleniumHQ + PhantomJS + Fixture Factory
BDD - JBehave + SeleniumHQ + PhantomJS  + Fixture FactoryBDD - JBehave + SeleniumHQ + PhantomJS  + Fixture Factory
BDD - JBehave + SeleniumHQ + PhantomJS + Fixture Factory
 
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
 
TDC 2012 TDD e 20 coisas que você precisa saber
TDC 2012 TDD e 20 coisas que você precisa saberTDC 2012 TDD e 20 coisas que você precisa saber
TDC 2012 TDD e 20 coisas que você precisa saber
 
Dojo abril
Dojo abrilDojo abril
Dojo abril
 
Pep 8
Pep 8Pep 8
Pep 8
 
Tdd not sure if testing or developing
Tdd  not sure if testing or developingTdd  not sure if testing or developing
Tdd not sure if testing or developing
 
Coding dojo
Coding dojoCoding dojo
Coding dojo
 
TDD
TDDTDD
TDD
 
TDD direto das trincheiras
TDD direto das trincheirasTDD direto das trincheiras
TDD direto das trincheiras
 
Testes Unitários
Testes UnitáriosTestes Unitários
Testes Unitários
 
Seja Um Programador Pragmatico
Seja Um Programador PragmaticoSeja Um Programador Pragmatico
Seja Um Programador Pragmatico
 
TDD para Java EE
TDD para Java EETDD para Java EE
TDD para Java EE
 
Apresentacao tdc 2012
Apresentacao tdc 2012Apresentacao tdc 2012
Apresentacao tdc 2012
 
Gherkin
Gherkin   Gherkin
Gherkin
 
Código Limpo: Testes de Unidade Capítulo 09
Código Limpo: Testes de Unidade Capítulo 09 Código Limpo: Testes de Unidade Capítulo 09
Código Limpo: Testes de Unidade Capítulo 09
 
Boas práticas no desenvolvimento de software através do uso de TDD
Boas práticas no desenvolvimento de software através do uso de TDDBoas práticas no desenvolvimento de software através do uso de TDD
Boas práticas no desenvolvimento de software através do uso de TDD
 
Tdd direto das trincheiras
Tdd direto das trincheirasTdd direto das trincheiras
Tdd direto das trincheiras
 
Treinamento TDD - Atech
Treinamento TDD - AtechTreinamento TDD - Atech
Treinamento TDD - Atech
 
TDD - A Verdadeira Face do Teste
TDD - A Verdadeira Face do TesteTDD - A Verdadeira Face do Teste
TDD - A Verdadeira Face do Teste
 

Destaque

Desconf 2012 - Métricas de vaidade
Desconf 2012 - Métricas de vaidadeDesconf 2012 - Métricas de vaidade
Desconf 2012 - Métricas de vaidadeHélio Medeiros
 
1º Coding Dojo - Grupo RBS no TecnoPUC
1º Coding Dojo - Grupo RBS no TecnoPUC1º Coding Dojo - Grupo RBS no TecnoPUC
1º Coding Dojo - Grupo RBS no TecnoPUCHélio Medeiros
 
Gerando valor desafios no lançamentdo conteúdo pago
Gerando valor   desafios no lançamentdo conteúdo pagoGerando valor   desafios no lançamentdo conteúdo pago
Gerando valor desafios no lançamentdo conteúdo pagoHélio Medeiros
 
55591762 aula-3-modificando-pensamentos-automaticos
55591762 aula-3-modificando-pensamentos-automaticos55591762 aula-3-modificando-pensamentos-automaticos
55591762 aula-3-modificando-pensamentos-automaticosJosé Salomão
 
Test de beck
Test de beckTest de beck
Test de beckgccdg
 
Inventario de pensamientos automaticos
Inventario de pensamientos automaticosInventario de pensamientos automaticos
Inventario de pensamientos automaticosjose henriquez
 
Apresentação1 Escalas Beck
Apresentação1 Escalas BeckApresentação1 Escalas Beck
Apresentação1 Escalas Beckmicaterres
 
Slide sobre o teste Escalas Beck
Slide sobre o teste Escalas Beck Slide sobre o teste Escalas Beck
Slide sobre o teste Escalas Beck Darciane Brito
 
Exercícios de Crenças
Exercícios de CrençasExercícios de Crenças
Exercícios de Crençaspsimais
 
Método Socrático em Terapia Cognitiva-Comportamental
Método Socrático em Terapia Cognitiva-ComportamentalMétodo Socrático em Terapia Cognitiva-Comportamental
Método Socrático em Terapia Cognitiva-ComportamentalMarcelo da Rocha Carvalho
 

Destaque (12)

Desconf 2012 - Métricas de vaidade
Desconf 2012 - Métricas de vaidadeDesconf 2012 - Métricas de vaidade
Desconf 2012 - Métricas de vaidade
 
1º Coding Dojo - Grupo RBS no TecnoPUC
1º Coding Dojo - Grupo RBS no TecnoPUC1º Coding Dojo - Grupo RBS no TecnoPUC
1º Coding Dojo - Grupo RBS no TecnoPUC
 
Gerando valor desafios no lançamentdo conteúdo pago
Gerando valor   desafios no lançamentdo conteúdo pagoGerando valor   desafios no lançamentdo conteúdo pago
Gerando valor desafios no lançamentdo conteúdo pago
 
55591762 aula-3-modificando-pensamentos-automaticos
55591762 aula-3-modificando-pensamentos-automaticos55591762 aula-3-modificando-pensamentos-automaticos
55591762 aula-3-modificando-pensamentos-automaticos
 
Biofeedback
BiofeedbackBiofeedback
Biofeedback
 
Test de beck
Test de beckTest de beck
Test de beck
 
Inventario de pensamientos automaticos
Inventario de pensamientos automaticosInventario de pensamientos automaticos
Inventario de pensamientos automaticos
 
Apresentação1 Escalas Beck
Apresentação1 Escalas BeckApresentação1 Escalas Beck
Apresentação1 Escalas Beck
 
Slide sobre o teste Escalas Beck
Slide sobre o teste Escalas Beck Slide sobre o teste Escalas Beck
Slide sobre o teste Escalas Beck
 
Exercícios de Crenças
Exercícios de CrençasExercícios de Crenças
Exercícios de Crenças
 
Método Socrático em Terapia Cognitiva-Comportamental
Método Socrático em Terapia Cognitiva-ComportamentalMétodo Socrático em Terapia Cognitiva-Comportamental
Método Socrático em Terapia Cognitiva-Comportamental
 
A terapia cognitivo comportamental
A terapia cognitivo comportamentalA terapia cognitivo comportamental
A terapia cognitivo comportamental
 

Semelhante a Automatizando testes em 4 passos

UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27Hélio Medeiros
 
Falando sobre testes automatizados
Falando sobre testes automatizadosFalando sobre testes automatizados
Falando sobre testes automatizadosBreno Oliveira
 
Os Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de softwareOs Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de softwareDextra Sistemas / Etec Itu
 

Semelhante a Automatizando testes em 4 passos (7)

Introdução a TDD
Introdução a TDDIntrodução a TDD
Introdução a TDD
 
Teste automatizados e tdd
Teste automatizados e tddTeste automatizados e tdd
Teste automatizados e tdd
 
UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27
 
Falando sobre testes automatizados
Falando sobre testes automatizadosFalando sobre testes automatizados
Falando sobre testes automatizados
 
TDD em 220V
TDD em 220VTDD em 220V
TDD em 220V
 
Os Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de softwareOs Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de software
 
Testes - Para que?
Testes - Para que?Testes - Para que?
Testes - Para que?
 

Mais de Hélio Medeiros

Team building - Workshop - ThoughtWorks Away Day 2018
Team building - Workshop - ThoughtWorks Away Day 2018Team building - Workshop - ThoughtWorks Away Day 2018
Team building - Workshop - ThoughtWorks Away Day 2018Hélio Medeiros
 
Team building praticas e atividades
Team building   praticas e atividadesTeam building   praticas e atividades
Team building praticas e atividadesHélio Medeiros
 
Historias, hipoteses e metricas aprendendo no dia a dia
Historias, hipoteses e metricas   aprendendo no dia a diaHistorias, hipoteses e metricas   aprendendo no dia a dia
Historias, hipoteses e metricas aprendendo no dia a diaHélio Medeiros
 
Team building - Software depende de relacionamento
Team building  - Software depende de relacionamentoTeam building  - Software depende de relacionamento
Team building - Software depende de relacionamentoHélio Medeiros
 
Continuidade de times - quando os relacionamentos contam?
Continuidade de times - quando os relacionamentos contam?Continuidade de times - quando os relacionamentos contam?
Continuidade de times - quando os relacionamentos contam?Hélio Medeiros
 
Historias sao suposicoes: build:measure:learn no kanban e livro de possibilid...
Historias sao suposicoes: build:measure:learn no kanban e livro de possibilid...Historias sao suposicoes: build:measure:learn no kanban e livro de possibilid...
Historias sao suposicoes: build:measure:learn no kanban e livro de possibilid...Hélio Medeiros
 
Faça Frameworks, Não faça refens
Faça Frameworks, Não faça refensFaça Frameworks, Não faça refens
Faça Frameworks, Não faça refensHélio Medeiros
 
Feature injection - descobrindo e entregando valor testável
Feature injection - descobrindo e entregando valor testávelFeature injection - descobrindo e entregando valor testável
Feature injection - descobrindo e entregando valor testávelHélio Medeiros
 
Growth hacking - customer lifecycle na pratica
Growth hacking - customer lifecycle na praticaGrowth hacking - customer lifecycle na pratica
Growth hacking - customer lifecycle na praticaHélio Medeiros
 
Tdc growth hacking-customer lifecycle na pratica
Tdc   growth hacking-customer lifecycle na praticaTdc   growth hacking-customer lifecycle na pratica
Tdc growth hacking-customer lifecycle na praticaHélio Medeiros
 
A Jornada de um desenvolvedor de Princípios SOLID em um mundo de micro-services
A Jornada de um desenvolvedor de Princípios SOLID em um mundo de micro-servicesA Jornada de um desenvolvedor de Princípios SOLID em um mundo de micro-services
A Jornada de um desenvolvedor de Princípios SOLID em um mundo de micro-servicesHélio Medeiros
 
Feature Injection - Descobrindo e entregando valor testável
Feature Injection - Descobrindo e entregando valor testávelFeature Injection - Descobrindo e entregando valor testável
Feature Injection - Descobrindo e entregando valor testávelHélio Medeiros
 
Um desenvolvedor com princípios SOLID
Um desenvolvedor com princípios SOLIDUm desenvolvedor com princípios SOLID
Um desenvolvedor com princípios SOLIDHélio Medeiros
 
RBS QCon São Paulo 2014 REVIEW
RBS QCon São Paulo 2014 REVIEWRBS QCon São Paulo 2014 REVIEW
RBS QCon São Paulo 2014 REVIEWHélio Medeiros
 
Git that like a boss - Colaborando com GITHUB
Git that like a boss - Colaborando com GITHUBGit that like a boss - Colaborando com GITHUB
Git that like a boss - Colaborando com GITHUBHélio Medeiros
 
Git that like a boss - Dos comandos básicos aos branches.
Git that like a boss - Dos comandos básicos aos branches.Git that like a boss - Dos comandos básicos aos branches.
Git that like a boss - Dos comandos básicos aos branches.Hélio Medeiros
 
Treinamento git - Papos RBSDev
Treinamento git - Papos RBSDevTreinamento git - Papos RBSDev
Treinamento git - Papos RBSDevHélio Medeiros
 
RBS Agile Brazil Review - Managing dojo
RBS Agile Brazil Review - Managing dojoRBS Agile Brazil Review - Managing dojo
RBS Agile Brazil Review - Managing dojoHélio Medeiros
 
RBS Agile Brazil 2013 Review - HotSpot
RBS Agile Brazil 2013 Review - HotSpotRBS Agile Brazil 2013 Review - HotSpot
RBS Agile Brazil 2013 Review - HotSpotHélio Medeiros
 
Agile brazil 2013 - Laboratório Experimental refinando ideias e lançando prod...
Agile brazil 2013 - Laboratório Experimental refinando ideias e lançando prod...Agile brazil 2013 - Laboratório Experimental refinando ideias e lançando prod...
Agile brazil 2013 - Laboratório Experimental refinando ideias e lançando prod...Hélio Medeiros
 

Mais de Hélio Medeiros (20)

Team building - Workshop - ThoughtWorks Away Day 2018
Team building - Workshop - ThoughtWorks Away Day 2018Team building - Workshop - ThoughtWorks Away Day 2018
Team building - Workshop - ThoughtWorks Away Day 2018
 
Team building praticas e atividades
Team building   praticas e atividadesTeam building   praticas e atividades
Team building praticas e atividades
 
Historias, hipoteses e metricas aprendendo no dia a dia
Historias, hipoteses e metricas   aprendendo no dia a diaHistorias, hipoteses e metricas   aprendendo no dia a dia
Historias, hipoteses e metricas aprendendo no dia a dia
 
Team building - Software depende de relacionamento
Team building  - Software depende de relacionamentoTeam building  - Software depende de relacionamento
Team building - Software depende de relacionamento
 
Continuidade de times - quando os relacionamentos contam?
Continuidade de times - quando os relacionamentos contam?Continuidade de times - quando os relacionamentos contam?
Continuidade de times - quando os relacionamentos contam?
 
Historias sao suposicoes: build:measure:learn no kanban e livro de possibilid...
Historias sao suposicoes: build:measure:learn no kanban e livro de possibilid...Historias sao suposicoes: build:measure:learn no kanban e livro de possibilid...
Historias sao suposicoes: build:measure:learn no kanban e livro de possibilid...
 
Faça Frameworks, Não faça refens
Faça Frameworks, Não faça refensFaça Frameworks, Não faça refens
Faça Frameworks, Não faça refens
 
Feature injection - descobrindo e entregando valor testável
Feature injection - descobrindo e entregando valor testávelFeature injection - descobrindo e entregando valor testável
Feature injection - descobrindo e entregando valor testável
 
Growth hacking - customer lifecycle na pratica
Growth hacking - customer lifecycle na praticaGrowth hacking - customer lifecycle na pratica
Growth hacking - customer lifecycle na pratica
 
Tdc growth hacking-customer lifecycle na pratica
Tdc   growth hacking-customer lifecycle na praticaTdc   growth hacking-customer lifecycle na pratica
Tdc growth hacking-customer lifecycle na pratica
 
A Jornada de um desenvolvedor de Princípios SOLID em um mundo de micro-services
A Jornada de um desenvolvedor de Princípios SOLID em um mundo de micro-servicesA Jornada de um desenvolvedor de Princípios SOLID em um mundo de micro-services
A Jornada de um desenvolvedor de Princípios SOLID em um mundo de micro-services
 
Feature Injection - Descobrindo e entregando valor testável
Feature Injection - Descobrindo e entregando valor testávelFeature Injection - Descobrindo e entregando valor testável
Feature Injection - Descobrindo e entregando valor testável
 
Um desenvolvedor com princípios SOLID
Um desenvolvedor com princípios SOLIDUm desenvolvedor com princípios SOLID
Um desenvolvedor com princípios SOLID
 
RBS QCon São Paulo 2014 REVIEW
RBS QCon São Paulo 2014 REVIEWRBS QCon São Paulo 2014 REVIEW
RBS QCon São Paulo 2014 REVIEW
 
Git that like a boss - Colaborando com GITHUB
Git that like a boss - Colaborando com GITHUBGit that like a boss - Colaborando com GITHUB
Git that like a boss - Colaborando com GITHUB
 
Git that like a boss - Dos comandos básicos aos branches.
Git that like a boss - Dos comandos básicos aos branches.Git that like a boss - Dos comandos básicos aos branches.
Git that like a boss - Dos comandos básicos aos branches.
 
Treinamento git - Papos RBSDev
Treinamento git - Papos RBSDevTreinamento git - Papos RBSDev
Treinamento git - Papos RBSDev
 
RBS Agile Brazil Review - Managing dojo
RBS Agile Brazil Review - Managing dojoRBS Agile Brazil Review - Managing dojo
RBS Agile Brazil Review - Managing dojo
 
RBS Agile Brazil 2013 Review - HotSpot
RBS Agile Brazil 2013 Review - HotSpotRBS Agile Brazil 2013 Review - HotSpot
RBS Agile Brazil 2013 Review - HotSpot
 
Agile brazil 2013 - Laboratório Experimental refinando ideias e lançando prod...
Agile brazil 2013 - Laboratório Experimental refinando ideias e lançando prod...Agile brazil 2013 - Laboratório Experimental refinando ideias e lançando prod...
Agile brazil 2013 - Laboratório Experimental refinando ideias e lançando prod...
 

Automatizando testes em 4 passos

  • 1. Automatizando em quatro passos TESTES @helmedeiros
  • 2. 1. Conhecimentos básicos de testes 2. Cobertura de testes com Emma 3. Desenvolvendo testes unitários com JUnit 4. Testes unitários com objetos dubles usando mockito
  • 3.
  • 5. quanto maior estresse menor menor execução de testes Gerry Weinberg diagrama de influência
  • 6. valiar” ifica “a m maior ar sign em produção o estresse é b e test
  • 7. Top Down de aceitação... cenários de teste... critérios Bottom up box... 22 caixas de texto... 15 combo
  • 8. FIZ uma mu dança QUEBROU UMA PARTE QUE NÃ DEVIA O TEST - Teste Isolado ISOLATED pida; deve ser rá 1.A execuçã o dos testes eve ignorar as demais; 2. A execução d e um teste d Kent Beck TDD - Desenvolvimento Guiado por Testes
  • 9. alta éCOESÃO um módulo a medida da força relativa de fraco ACOPLAMENTO módulos é o nível de interdependência entre os
  • 10. TESTEI meu código O que m ais deveria testar? - Lista de testes TEST LIST ue precisa im plementar; perações que você sabe q ista ex emplos das o erência nula; 1.Coloque na l coloque a ve rsão de conf ar o código. implementa das zer para limp 2 .Para todas já e você acha que terá de fa te todas as re fatorações qu 3.Lis Kent Beck TDD - Desenvolvimento Guiado por Testes
  • 11. 1. Qual o conjunto de testes, que quando passarem, demonstrará que o código que estamos confiantes que irá calcular o relatório corretamente? $5 + 10 CHF = $10 se a taxa é 2:1 $5 * 2 = $10 Tornar a “quantidade” privada Efeitos colaterais em Dollar? Arredondamento de dinheiro? Kent Beck TDD - Desenvolvimento Guiado por Testes
  • 12. ESCREVI meu código QUANDO EU DEVO ESCREVER MEUS TESTES? RST - Teste primeiro TEST FI .Primeiro escreva os testes; ontrolado; 1 e designe c a o código c om o escopo 2.D epois escrev Kent Beck TDD - Desenvolvimento Guiado por Testes
  • 13. ESCREVI meu teste COMO EU FOCO A FUNCIONALI TESTE ? DADE E NÃO NO serção primeiro ST - Defina a as ASSERT FIR ando o código estiver certo; a a asserção q ue passará qu 1.Pr imeiro escrev pendências; lva de baixo p ara cima as de 2.Depois reso Kent Beck TDD - Desenvolvimento Guiado por Testes
  • 14. Quando eu testo definindo uma asserção primeiro, defino como reversa a minha lógica de construção, resolvendo um problema por vez. De onde a resposta vem? Do socket, certamente: Quando pronto o socket deve estar fechado e deveríamos 2 ter lido a string abc 1 Mas, antes disso, precisamos abrir o servidor: E o socket? Nós o criamos conectando ao servidor: 3 4 Kent Beck TDD - Desenvolvimento Guiado por Testes
  • 15. ESCREVI meu teste A ORDEM DOS PARÂMETROS IMPORTA? TA - Dados de teste TEST DA stes fáceis de ler e seguir; dados que faça m os te ença use dado s diferentes; 1.Use etros de cham ada fizer difer 2.Quando a or dem dos parâm Kent Beck TDD - Desenvolvimento Guiado por Testes
  • 16. ESCREVI meu teste O QUE SIGNIFICA NO SEGUNDO PARÂMETRO O VALOR 3? TA - Dados evidentes EVIDENT DA m qual o objet ivo do dado; 1.Pense e te objetivo; constante que transpareça es 2.Defina uma vezes para cas os diferentes. ilize a mesma constante duas *Não ut Kent Beck TDD - Desenvolvimento Guiado por Testes
  • 17. Todos os parâmetros de um método devem ser claros enquanto as suas intenções, assim como deve ser sua utilização. Devemos SEMPRE evidenciar o objetivo de cada valor. Constantes com o mesmo valor são diferidas pelo nome da constante. 1 O nome da constante diferencia os significados/intenções de cada parâmetro dentro da requisição e por conseguinte as cenário de teste. 2 Caelum FJ-16: Laboratório Java com Testes, XML
  • 18. TDD ento guiado por testes Desenvolvim 1 quais as soluções para o problema? qual o primeiro cenário que desejo resolver? 2 n++ 3 qual o próximo cenário? RESOLVIDO X
  • 19. er um prob lema escolh m teste que fa lhe! escrever u red
  • 20. rápido possível! le passar o mais fazer e green
  • 21. r que está bom! fatorar até acha depois re yello
  • 22. NOSSO PROBLEMA FizzBuzz
  • 23. 1 2 Fizz { 4 Buzz dada uma Fizz lista de 1 a 100 7 múltiplos de 3 8 múltiplos de 5 Fizz múltiplos de 3 e 5 Buzz 11 Fizz 13 14 FizzBuzz
  • 25. verage test cocobertura de testes é qualquer medida de abrangência relacionada a um requisito ou a um critério de design/implementação do código, como a verificação de casos de uso ou execução de todas as linhas de código.
  • 26. ENCONTRAR código não testado verage test co cobertur a de test es GARANTIR X qualidade do código
  • 27. statement coverage se detêm ao simples registro sobre quais linhas foram executadas. multiple conditions coverage mede cada condição lógica no código avaliando se existem cenários não testados.
  • 28. código original Instrumentação código avaliado multiple conditions coverage mede cada condição lógica no código avaliando se existem cenários não testados. execução dos testes
  • 29. Instrumentação A ferramenta de cobertura modifica o código para registrar quais expressões avaliar em qual caminho. Esta modificação pode ser feita tanto para o código-fonte quanto para o executável que o compilador gera. Se for feito de código-fonte, a maioria das ferramentas não alteram a fonte original, em vez disso, eles modificam uma cópia que é então passada para o compilador de uma maneira que faz parecer que é o original. multiple conditions coverage mede cada condição lógica no código avaliando se existem cenários não testados. Após a instrumentação, você deve executar vários testes, acumulando resultados de cobertura em alguns log.
  • 30. Códigos com condições lógicas são instrumentados, e após a execução são apresentados logs que descrevem dentre as possíveis condições quais não foram testadas. Código limpo, com condições lógicas: Código testado, com diferentes logs para as condições lógicas: 1 2 multiple conditions coverage mede cada condição lógica no código avaliando se existem cenários não testados.
  • 31. EclEMMA para o Eclipse. ferramenta de cobertura de código JaCoCode cobertura de código para Java. JaCoCo é uma biblioteca livre
  • 32. A execução de testes e cobertura não devem ser deixado para a fase de build e deploy, nem muito menos serem restritas as ferramentas de continuous deployment, todo desenvolvedor deve ser capaz de executar quantas vezes necessário antes de comitar seu código. EclEMMA 1 2 3
  • 33. Cada execução da bateria de testes e cobertura de seu código realizada pelo eclipse lhe conduzirá a um novo cenário de testes. Para cada cenário avalie o resultado esperado e crie um novo teste para aumentar a cobertura sob o aspecto. 2 1EclEMMA Execute a bateria de testes de cobertura apertando no nome do O que o seu código devera fazer? método ou da classe. Liste os cenários e em seguida as asserções para cada um destes. Analise o relatório e veja oque ainda falta ser avaliado. 3
  • 34. Scripts de execução de testes e de cobertura são abstrações menores, e desta forma devem ser preferíveis a grandes alterações ou escolhas estruturais. O JaCoCo e o Emma são excelentes e enxutas bibliotecas para execução na maquina dos desenvolvedores e serviços de deploy. 1 Criar targets para executar testes no junit, com apontamentos para os arquivos do emma. JaCoCo 3 2 Criar target para criação dos reports baseados nos arquivos gerados após a execução dos Criar target para execução da testes. instrumentação pelo emma.
  • 35. A execução de testes e cobertura devem ser repetidos na fase de build e deploy, com o apoio das ferramentas de continuous deployment, todo membro da equipe deve saber como está a qualidade e a confiança no código entregue com métricas acionáveis, acessíveis e auditáveis. JaCoCo
  • 36. A execução de testes e cobertura devem ser repetidos na fase de build e deploy, com o apoio das ferramentas de continuous deployment, todo membro da equipe deve saber como está a qualidade e a confiança no código entregue com métricas acionáveis, acessíveis e auditáveis. Gráficos de cobertura de testes, especificos por build, detalhados em pacotes. JaCoCo
  • 37. NOSSO PROBLEMA FizzBuzz ESTES) (COBERTUR A DE T
  • 38. 1 2 Fizz { 4 Buzz dada uma Fizz lista de 1 a 100 7 múltiplos de 3 8 múltiplos de 5 Fizz múltiplos de 3 e 5 Buzz 11 Fizz 13 14 FizzBuzz
  • 40. itário este un re uma classe T apenas sob Um teste de unitário é um pedaço de código (normalmente uma classe) que chama um outro pedaço de código e verifica a exatidão de alguns pressupostos. Se os pressupostos estiverem errados, o teste de unidade falha.
  • 41. Relatório X sucessos teste fixture Y falhas Z erros teste unitário teste unitário test case test case test case executar teste fixture test case test case test case test case test case test case test case test case test case test case test case test case test case test case test case test runner Suite de Teste executar
  • 42. JUnit este runner t O JUnit é um framework open-source, criado por Erich Gamma e Kent Beck, com suporte à criação de testes automatizados na linguagem de programação Java.
  • 43. A razão pela qual usamos testes em métodos ágeis é para que tenhamos especificações executáveis, adequadas sobre o que está sendo desenvolvido. Essas especificações devem falar sobre o que uma unidade faz, não sobre como ele executa suas tarefas. •assertEquals(expected, actual) •assertNotNull(Object object) •assertEquals(String message, expected, actual) •assertNotNull(String message, Object object) •assertSame(Object expected, Object actual) •assertTrue(String message, boolean condition) •assertSame(String message, Object expected, Object actual) •assertTrue(boolean condition) •assertNotSame(Object expected, Object actual) •assertFalse(String message, boolean condition) •assertNotSame(String message, Object expected, Object actual) •assertFalse(boolean condition) •assertNull(Object object) •fail() •assertNull(String message, Object object) •fail(String message)
  • 44. A elaboração dos cenários de teste envolvem a reflexão lógica, ou a evolução na forma de sincronizar fixtures que devem ser sincronizados tendo em mente o ciclo de execução dos testes. @BeforeClass @Before TEST CASE @After @AfterClass @Before @AfterClass @BeforeClass @Ignore @After @Test(expected=...)
  • 45. Comumente um conjunto de testes unitários devem ser executados em conjunto, seja devido a considerações enquanto ao raio de danos que uma alteração possa causar ou sentido funcional. Para isso usamos as Suites de teste. 1 Crie uma JUnit Test Suite nomeando-a apropriadamente 3 Execute a suite de testes, e analise o conjunto dos relatórios. Suite de testes 2 Defina a estratégia de agrupamento e quais são as classes que fazem parte deste.
  • 46. Maior parte do tempo você estará criando objetos que supram e especifiquem suas necessidades para seus casos de teste. Quando acontecer utilize Builders|ObjectMother como formas de especificar apenas o necessário. fixtures 1 2 3 Utilize os builders para tornar Crie uma JUnit Test Suite Crie uma classe Builder para seu mais legível cada uma das nomeando-a apropriadamente objeto. opções.
  • 47. “Métodos estáticos dificultam a escrita de testes de unidade. Para resolver isso podemos: evitar a escrita de métodos estáticos, ou criar abstrações que escondem esses métodos. Nao é feio criar abstrações como a Relogio; feio é não testar!” http://www.aniche.com.br/ 1 2 encontre locais onde você utiliza Defina uma interface a ser métodos estáticos que precisam utilizada no sistema em seu lugar ser simulados para seus casos de teste. testando métodos estáticos 4 Injete o objeto com o 3 comportamento que retorne como hoje o valor desejado Declare o campo em sua classe e em seguida substitua o mesmo pelas antigas chamadas estáticas. http://www.aniche.com.br/2011/09/testando-datas-e-metodos-estaticos/
  • 48. Um erro sem mensagem, ou sem referencias aninhadas pode ser uma pedra no sapato. Desta forma tratar exceções na maior parte das vezes deve estar relacionada as mensagens retornadas, assim como o tipo de erro. 1 encontre locais onde você utiliza métodos estáticos que precisam ser simulados para seus casos de teste. tratando exceções 2 Defina apenas a exceção esperada no bloco try catch. Manter throw da exceção recebida. E adicionar assert para mensagem.
  • 49. NOSSO PROBLEMA Frutas ctMother) uilders e Obje (JUnit, B
  • 50. Testes unitários com objetos dubles usando mockito
  • 51. ubmmy Dbofake e dules Test s, mocks, stu Muitas vezes objetos sob teste dependem de outros objetos, sobre os quais não temos nenhum controle (as vezes nem funcionam ainda). Neste caso usamos os dublês de teste, quaisquer objetos falsos, utilizado no lugar de um objeto real, com propósitos de teste. “There is no object-oriented problem that cannot be solved by adding a layer of indirection, except, of course, too many layers of indirection.”
  • 52. stub não quebram teste quando não chamados. objetos que possuem respostas pré-configuradas, mockquando não chamados. objetos que esperam ser acionados de uma forma específica, falham
  • 53. Muitas vezes, precisamos que nossa classe de teste se comporte de uma determinada maneira, com pontos de verificação temporários, ou ainda com uma implementação que não faz sentido em produção. Durante os testes usará acesso ao filesystem ao invés de base de dados. 1 2 Devemos criar uma interface para quando verificarmos um objeto a ser testado, ou o mesmo e substituí-lo por sua comportamento, apenas de estado. stubs auxiliar que não necessitar uma verificação de implementação. 3 Criar uma implementação com o comportamento desejado, e esperado.
  • 54. Muitas vezes precisamos verificar o comportamento de um objeto principal ou auxiliar em uma dada funcionalidade. Para estes casos o mais indicado é a utilização dos MOCKS. 1 mocks quando verificarmos um objeto a ser testado, ou auxiliar que necessitar uma verificação de comportamento. Devemos criar um mock para o mesmo. 2 3 Devemos verificar o comportamento do mesmo.
  • 55. Mockito é um framework de mocking, que permite escrever testes bonitos com API limpa e simples. •Cria Mocks de classes concretas assim como interfaces; •Anotações com syntax sugar; (@Mock) •Verificação dos erros é simplificada; •Suporta a verificação do exato numero assim como no mínimo um acesso de método; •Possuí verificação ou stub simplificado e flexível com utilização de matchers (anyObject(), anyString() ou refEq()); •Permite a criação de matchers customizados para argumentos usando hamcrest;