SlideShare uma empresa Scribd logo
1 de 86
Baixar para ler offline
Java & JUnit
Prof. 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

Mais conteúdo relacionado

Semelhante a Java JUnit introdução teste automático

DevOps Summit Brasil - O que não te contaram sobre Agile Testing
DevOps Summit Brasil - O que não te contaram sobre Agile TestingDevOps Summit Brasil - O que não te contaram sobre Agile Testing
DevOps Summit Brasil - O que não te contaram sobre Agile TestingSamanta Cicilia
 
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...minastestingconference
 
Importância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOpsImportância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOpsSamanta Cicilia
 
Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes. Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes. Tchelinux
 
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
 
Acelerando a criação de testes usando IntelliTest (Visual Studio Summit 2015)
Acelerando a criação de testes usando IntelliTest (Visual Studio Summit 2015)Acelerando a criação de testes usando IntelliTest (Visual Studio Summit 2015)
Acelerando a criação de testes usando IntelliTest (Visual Studio Summit 2015)Igor Abade
 
Desenvolvimento em .Net - Testes Unitários
Desenvolvimento em .Net - Testes UnitáriosDesenvolvimento em .Net - Testes Unitários
Desenvolvimento em .Net - Testes UnitáriosVitor Silva
 
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
 
Praticando o Desapego: quando ignorar a dívida técnica
Praticando o Desapego: quando ignorar a dívida técnicaPraticando o Desapego: quando ignorar a dívida técnica
Praticando o Desapego: quando ignorar a dívida técnicaIvayr Farah Netto
 
C#4 – O que há de novo
C#4 – O que há de novoC#4 – O que há de novo
C#4 – O que há de novoGiovanni Bassi
 
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
 
Praticando o desapego quando ignorar a dívida técnica
Praticando o desapego  quando ignorar a dívida técnica Praticando o desapego  quando ignorar a dívida técnica
Praticando o desapego quando ignorar a dívida técnica Elvis Lima
 

Semelhante a Java JUnit introdução teste automático (20)

DevOps Summit Brasil - O que não te contaram sobre Agile Testing
DevOps Summit Brasil - O que não te contaram sobre Agile TestingDevOps Summit Brasil - O que não te contaram sobre Agile Testing
DevOps Summit Brasil - O que não te contaram sobre Agile Testing
 
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
 
Importância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOpsImportância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOps
 
Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes. Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes.
 
JUnit
JUnitJUnit
JUnit
 
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...
 
Testes Unitários
Testes UnitáriosTestes Unitários
Testes Unitários
 
Acelerando a criação de testes usando IntelliTest (Visual Studio Summit 2015)
Acelerando a criação de testes usando IntelliTest (Visual Studio Summit 2015)Acelerando a criação de testes usando IntelliTest (Visual Studio Summit 2015)
Acelerando a criação de testes usando IntelliTest (Visual Studio Summit 2015)
 
JUnit Sample
JUnit SampleJUnit Sample
JUnit Sample
 
Be React. Do Tests!
Be React. Do Tests!Be React. Do Tests!
Be React. Do Tests!
 
Ctai Teste De Software Aula 1
Ctai Teste De Software Aula 1Ctai Teste De Software Aula 1
Ctai Teste De Software Aula 1
 
Desenvolvimento em .Net - Testes Unitários
Desenvolvimento em .Net - Testes UnitáriosDesenvolvimento em .Net - Testes Unitários
Desenvolvimento em .Net - Testes Unitários
 
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
 
Praticando o Desapego: quando ignorar a dívida técnica
Praticando o Desapego: quando ignorar a dívida técnicaPraticando o Desapego: quando ignorar a dívida técnica
Praticando o Desapego: quando ignorar a dívida técnica
 
1° Madrugada de Testes
1° Madrugada de Testes1° Madrugada de Testes
1° Madrugada de Testes
 
C#4 – O que há de novo
C#4 – O que há de novoC#4 – O que há de novo
C#4 – O que há de novo
 
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 ...
 
Refactoring - Design no Código
Refactoring - Design no CódigoRefactoring - Design no Código
Refactoring - Design no Código
 
Introdução a tdd
Introdução a tddIntrodução a tdd
Introdução a tdd
 
Praticando o desapego quando ignorar a dívida técnica
Praticando o desapego  quando ignorar a dívida técnica Praticando o desapego  quando ignorar a dívida técnica
Praticando o desapego quando ignorar a dívida técnica
 

Mais de Ivan Ricarte

Aula catalogo de refatoracoes
Aula   catalogo de refatoracoesAula   catalogo de refatoracoes
Aula catalogo de refatoracoesIvan Ricarte
 
Refatoração: Code smells
Refatoração: Code smellsRefatoração: Code smells
Refatoração: Code smellsIvan Ricarte
 
Aplicacoes web semantica saude
Aplicacoes web semantica saudeAplicacoes web semantica saude
Aplicacoes web semantica saudeIvan Ricarte
 
R - Software Estatistico
R - Software EstatisticoR - Software Estatistico
R - Software EstatisticoIvan Ricarte
 
Aula revisão de java e junit
Aula   revisão de java e junitAula   revisão de java e junit
Aula revisão de java e junitIvan Ricarte
 
Introducao a refatoracao
Introducao a refatoracaoIntroducao a refatoracao
Introducao a refatoracaoIvan Ricarte
 
C++: biblioteca padrão de templates - Parte 1
C++: biblioteca padrão de templates - Parte 1C++: biblioteca padrão de templates - Parte 1
C++: biblioteca padrão de templates - Parte 1Ivan Ricarte
 
Membros de classes C++
Membros de classes C++Membros de classes C++
Membros de classes C++Ivan Ricarte
 
Princípios da organização de código fonte C++
Princípios da organização de código fonte C++Princípios da organização de código fonte C++
Princípios da organização de código fonte C++Ivan Ricarte
 
Problemas no desenvolvimento do software
Problemas no desenvolvimento do softwareProblemas no desenvolvimento do software
Problemas no desenvolvimento do softwareIvan Ricarte
 
Aula 01 - As linguagens do software (2015)
Aula 01 - As linguagens do software (2015)Aula 01 - As linguagens do software (2015)
Aula 01 - As linguagens do software (2015)Ivan Ricarte
 
SI300 - Apoio a atividades práticas em C++ (01)
SI300 - Apoio a atividades práticas em C++ (01)SI300 - Apoio a atividades práticas em C++ (01)
SI300 - Apoio a atividades práticas em C++ (01)Ivan Ricarte
 
O Projeto Evid@SP - Disseminação de evidências a profissionais da saúde
O Projeto Evid@SP - Disseminação de evidências a profissionais da saúdeO Projeto Evid@SP - Disseminação de evidências a profissionais da saúde
O Projeto Evid@SP - Disseminação de evidências a profissionais da saúdeIvan Ricarte
 
Um novo paradigma para o ensino de ponteiros frente à evolução de C++
Um novo paradigma para o ensino de ponteiros frente à evolução de C++Um novo paradigma para o ensino de ponteiros frente à evolução de C++
Um novo paradigma para o ensino de ponteiros frente à evolução de C++Ivan Ricarte
 

Mais de Ivan Ricarte (20)

Aula catalogo de refatoracoes
Aula   catalogo de refatoracoesAula   catalogo de refatoracoes
Aula catalogo de refatoracoes
 
Refatoração: Code smells
Refatoração: Code smellsRefatoração: Code smells
Refatoração: Code smells
 
Aplicacoes web semantica saude
Aplicacoes web semantica saudeAplicacoes web semantica saude
Aplicacoes web semantica saude
 
R - Software Estatistico
R - Software EstatisticoR - Software Estatistico
R - Software Estatistico
 
Aula UML e Java
Aula UML e JavaAula UML e Java
Aula UML e Java
 
Aula revisão de java e junit
Aula   revisão de java e junitAula   revisão de java e junit
Aula revisão de java e junit
 
Introducao a refatoracao
Introducao a refatoracaoIntroducao a refatoracao
Introducao a refatoracao
 
C++: biblioteca padrão de templates - Parte 1
C++: biblioteca padrão de templates - Parte 1C++: biblioteca padrão de templates - Parte 1
C++: biblioteca padrão de templates - Parte 1
 
c++ construtores
c++ construtoresc++ construtores
c++ construtores
 
Padroes
PadroesPadroes
Padroes
 
C++ Sobrecarga
C++ SobrecargaC++ Sobrecarga
C++ Sobrecarga
 
Membros de classes C++
Membros de classes C++Membros de classes C++
Membros de classes C++
 
UML e POO
UML e POOUML e POO
UML e POO
 
Antipadroes
AntipadroesAntipadroes
Antipadroes
 
Princípios da organização de código fonte C++
Princípios da organização de código fonte C++Princípios da organização de código fonte C++
Princípios da organização de código fonte C++
 
Problemas no desenvolvimento do software
Problemas no desenvolvimento do softwareProblemas no desenvolvimento do software
Problemas no desenvolvimento do software
 
Aula 01 - As linguagens do software (2015)
Aula 01 - As linguagens do software (2015)Aula 01 - As linguagens do software (2015)
Aula 01 - As linguagens do software (2015)
 
SI300 - Apoio a atividades práticas em C++ (01)
SI300 - Apoio a atividades práticas em C++ (01)SI300 - Apoio a atividades práticas em C++ (01)
SI300 - Apoio a atividades práticas em C++ (01)
 
O Projeto Evid@SP - Disseminação de evidências a profissionais da saúde
O Projeto Evid@SP - Disseminação de evidências a profissionais da saúdeO Projeto Evid@SP - Disseminação de evidências a profissionais da saúde
O Projeto Evid@SP - Disseminação de evidências a profissionais da saúde
 
Um novo paradigma para o ensino de ponteiros frente à evolução de C++
Um novo paradigma para o ensino de ponteiros frente à evolução de C++Um novo paradigma para o ensino de ponteiros frente à evolução de C++
Um novo paradigma para o ensino de ponteiros frente à evolução de C++
 

Java JUnit introdução teste automático