Upload
ivan-ricarte
View
414
Download
1
Embed Size (px)
Citation preview
Java & JUnitProf. Dr. Ivan L. M. Ricarte
FT-UNICAMP
2017
Objetivos
• Revisão da programação orientada a objetos com Java
• Apresentação do framework de teste de unidade JUnit
2017 Prof. Ivan Ricarte 2
Estudo de caso
• Aplicação da vídeo-locadora (sim, coisa do passado...)
• Cliente (Customer) tem, além do nome (name), o registro de alugueis de filmes
• Para cada aluguel de filme, há a indicação do filme que foi alugado e o registro da quantidade de dias alugados (daysRented)
• Cada filme tem, além do título (title), uma categoria (priceCode) associada, que pode ser uma entre lançamento (NEW_RELEASE), comum (REGULAR) ou infantil (CHILDRENS)
• O método statement(), da classe Customer, gera o relatório (um objeto String) dos filmes alugados pelo cliente e o valor a ser pago
2017 Prof. Ivan Ricarte 3
Utilizando a IDE (NetBeans)
2017 Prof. Ivan Ricarte 4
Diagrama UML
Código Java
Novo projeto (Código Java)
2017 Prof. Ivan Ricarte 5
2017 Prof. Ivan Ricarte 6
2017 Prof. Ivan Ricarte 7
2017 Prof. Ivan Ricarte 8
Novo projeto (Diagrama UML)
2017 Prof. Ivan Ricarte 9
2017 Prof. Ivan Ricarte 10
2017 Prof. Ivan Ricarte 11
2017 Prof. Ivan Ricarte 12
2017 Prof. Ivan Ricarte 13
Diagrama UML
2017 Prof. Ivan Ricarte 14
EasyUML/NetBeans
Geração de código
2017 Prof. Ivan Ricarte 15
2017 Prof. Ivan Ricarte 16
2017 Prof. Ivan Ricarte 17
2017 Prof. Ivan Ricarte 18
2017 Prof. Ivan Ricarte 19
2017 Prof. Ivan Ricarte 20
Código gerado a partir do diagrama UML
2017 Prof. Ivan Ricarte 21
2017 Prof. Ivan Ricarte 22
Obs.: sem atributo referencial para Movie
2017 Prof. Ivan Ricarte 23
Obs.: sem atributo referencial para coleção de Rental, sem implementação do método
Complementação do código
2017 Prof. Ivan Ricarte 24
Incluir operações para:
• Construir objeto com título e código;
• Obter título (não é alterado)
• Obter e alterar código
2017 Prof. Ivan Ricarte 25
2017 Prof. Ivan Ricarte 26
2017 Prof. Ivan Ricarte 27
2017 Prof. Ivan Ricarte 28
2017 Prof. Ivan Ricarte 29
2017 Prof. Ivan Ricarte 30
2017 Prof. Ivan Ricarte 31
2017 Prof. Ivan Ricarte 32
2017 Prof. Ivan Ricarte 33
2017 Prof. Ivan Ricarte 34
2017 Prof. Ivan Ricarte 35
2017 Prof. Ivan Ricarte 36
2017 Prof. Ivan Ricarte 37
2017 Prof. Ivan Ricarte 38
2017 Prof. Ivan Ricarte 39
Para inserir os campos de tipo de filme:
2017 Prof. Ivan Ricarte 40
2017 Prof. Ivan Ricarte 41
Similarmente, para a classe Rental
2017 Prof. Ivan Ricarte 42
Incluir campo (atributo referencial) para um objeto da classe Movie
Incluir operações para:
• Construir objeto com filme e dias de aluguel;
• Obter filme (não alterado)
• Obter dias de aluguel (não alterado)
2017 Prof. Ivan Ricarte 43
2017 Prof. Ivan Ricarte 44
2017 Prof. Ivan Ricarte 45
2017 Prof. Ivan Ricarte 46
2017 Prof. Ivan Ricarte 47
2017 Prof. Ivan Ricarte 48
Como testar se as classes estão corretas?
Abordagem 1 (não recomendada): usar o método main
• Pode ser definido para cada classe
• Pode ter um teste que envolva mais de uma classe
2017 Prof. Ivan Ricarte 49
Exemplo: um método main para Movie
2017 Prof. Ivan Ricarte 50
Execução
2017 Prof. Ivan Ricarte 51
2017 Prof. Ivan Ricarte 52
2017 Prof. Ivan Ricarte 53
Um main envolvendo Movie e Rental
2017 Prof. Ivan Ricarte 54
2017 Prof. Ivan Ricarte 55
2017 Prof. Ivan Ricarte 56
Limitações dessa abordagem
Execução manual de cada método main
Verificação do resultado precisa de intervenção humana
2017 Prof. Ivan Ricarte 57
Alternativa: teste automático
2017 Prof. Ivan Ricarte 58
Teste de unidade
2017 Prof. Ivan Ricarte 59
Princípios do teste de unidade
Abordagem de teste caixa-preta• Como o método foi implementado não é relevante
Testa um método de cada vez
Cada método X( ) será verificado por um método de teste(tipicamente, testX( )) que:
Cria as condições para invocar o método Invoca o método Verifica se resultado ou efeito foi o esperado
2017 Prof. Ivan Ricarte 60
JUnit em NetBeans
2017 Prof. Ivan Ricarte 61
Passo 1: Criar o conjunto de métodos de teste para uma classe
2017 Prof. Ivan Ricarte 62
2017 Prof. Ivan Ricarte 63
Opções de código gerado
2017 Prof. Ivan Ricarte 64
https://netbeans.org/kb/docs/java/junit-intro_pt_BR.html
Código gerado
2017 Prof. Ivan Ricarte 65
Implementação default
2017 Prof. Ivan Ricarte 66
Método que, quando executado, causa a falha do teste
Precisa ser substituído pelo “teste correto”
Execução do teste
2017 Prof. Ivan Ricarte 67
Resultado da execução com métodos fail()
2017 Prof. Ivan Ricarte 68
Como verificar o resultado dos testes
O método fail() é um dos métodos de verificação de resultado de testes oferecido pelo framework Junit
• Sempre causa a falha do teste
• Usado, por exemplo, para indicar que código atingiu um ponto que não deveria ser alcançado em condições normais de execução
Além desse método, outros métodos de asserção são utilizados, tais como:
• assertEquals(): causa a falha do teste se os dois valores passados como argumentos não são iguais
• Dois valores: valor esperado, resultado da execução do teste
• assertTrue(): causa a falha do teste se a condição passada como argumento não for verdadeira
2017 Prof. Ivan Ricarte 69
2017 Prof. Ivan Ricarte 70
Outros métodos de asserção
Sempre com opção de ter string de mensagem como primeiro argumento:
• assertFalse(condição)
• assertArrayEquals(arrayEsperado, arrayObtido)
• assertNotEquals(valorNãoEsperado, valorObtido)
• assertNull(referenciaObtida)
• assertNotNull(referenciaObtida)
• assertSame(objetoEsperado, objetoObtido)
• assertNotSame(objetoNãoEsperado, objetoObtido)
Para valores e arranjos, há assinaturas para os diferentes tipos primitivos.
2017 Prof. Ivan Ricarte 71
Corpo atualizado dos métodos de teste
2017 Prof. Ivan Ricarte 72
Resultado da execução dos testes
2017 Prof. Ivan Ricarte 73
2017 Prof. Ivan Ricarte 74
2017 Prof. Ivan Ricarte 75
Detalhar
2017 Prof. Ivan Ricarte 76
Uso do inicializador de testes
Condições especiais de teste: timeout
2017 Prof. Ivan Ricarte 77
Tempo em milissegundos
https://netbeans.org/kb/docs/java/junit-intro_pt_BR.html
Condições especiais de teste: exceções
2017 Prof. Ivan Ricarte 78
Classe da exceção que é esperada na execução do teste
https://netbeans.org/kb/docs/java/junit-intro_pt_BR.html
Criando e executando conjuntos de testes
2017 Prof. Ivan Ricarte 79
2017 Prof. Ivan Ricarte 80
2017 Prof. Ivan Ricarte 81
2017 Prof. Ivan Ricarte 82
2017 Prof. Ivan Ricarte 83
Para mais informação...
2017 Prof. Ivan Ricarte 84
2017 Prof. Ivan Ricarte 85
...
...
2017 Prof. Ivan Ricarte 86