SlideShare ist ein Scribd-Unternehmen logo
1 von 23
Downloaden Sie, um offline zu lesen
Curso de Testes Automatizados
Unidade II
Testes Unitarios
Conteúdo Pragmático
● Unidade I
● Introdução a teste de software
● Introdução a automação de teste de software
● Básico sobre teste unitário
● Unidade II
● Técnicas de Teste Unitários
● TestNG
● Mockito
● Unidade III
● Testando com Banco de Dados
● DBUnit
● Testes Funcionais
● Selenium
● Unidade IV
● Princípios e Filosofia de Testes Automatizados
● Introdução ao TDD
Agenda
● Técnicas de Teste Unitários
● TestNG
● Mockito
Técnicas de Teste Unitários
● Stubs e como eles nós ajudam a quebrar as
depêndencias
● Técnicas de refatoração para tornar o codigo
mais testavel
● Mocks and Stubs
Introdução a stubs
● Definições
● Uma dependência externa, é um objeto em seu
sistema com o qual seu código sob teste interage ,
e sobre a qual você não tem controle. (Ex.:
sistemas de arquivos, threads, memória, tempo,
etc.)
● Um stub é um substituto controlável para uma
dependência existente no sistema. Usando um
stub, você pode testar seu código sem lidar com a
dependência direta.
Tecnicas para quebrar
dependências
● Idetificando dependência
● Determinando como facilitar o teste
● Adicionando mais uma camada de indireção
● Refactoring do projeto para ser mais testavel
● Refactoring é o ato de mudança no design do
código sem quebrar funcionalidade existente.
● Seams são lugares em seu código onde você pode
conectar diferentes funcionalidades, atraves de
stubs.
Tecnicas para quebrar
dependências
● Refactoring do projeto para ser mais testavel
● Extrair uma interface para permitir a substituição de
execução subjacente.
● Injetar implementação de stub em uma classe sob
teste.
● Receber uma interface ao nível do construtor.
● Receber uma interface como uma propriedade get
ou set.
● Obter um stub pouco antes da chamada de
método.
Interação entre testes usando
objetos mocks
Como testar a chamada correta a outros objetos
Testes baseados no estado vs
Testes de interação
● Testes baseados no estado (também chamada
de verificação de estado) determina se o
método exercido funcionou corretamente,
examinando o estado do sistema em teste e
seus colaboradores (dependências) depois que
o método é executado.
● Testes de interação é testar como um objeto
envia ou recebe dados outros objetos com o
qual interage.
Mock Object
● Um mock object é um objeto falso no sistema
que decide se o teste de unidade passou ou
falhou. No sentido de verificar se o objeto em
teste interagiu como esperado com o objeto
falso. Há geralmente não mais do que um
mock por teste.
Diferença entre mock e stubs
Diferença entre mock e stubs
Usando mock e stub juntos
Exemplo
Um mock por teste
● Em um teste onde testamos apenas uma coisa
(que é o recomendo), não deve haver mais de
um objeto mock. Todos os outros objetos falsos
atuaram como stubs.
● Tendo mais de um teste simulado por
usualiado significa que você está testando mais
de uma coisa, e isso pode levar a com-testes
complicados ou frágil.
Problemas em escrever mock e
stubs manualmente
● Leva tempo para escrever o mocks e stubs.
● É difícil escrever stubs e mocks para as classes e interfaces quetem
muitos métodos, propriedades e eventos.
● Para salvar o estado de várias chamadas de um método de
simulação, você precisa escrever muito código para salvar os dados.
● Se você deseja verificar todos os parâmetros de uma chamada de
método, você precisa escrever várias acersões. Se a primeira
afirmação falhar, as outros nunca seram executadas, porque huve
uma exceção.
● É difícil a reutilização de código simulado e stub para outros testes.
Isolando mocks com os framwarks
Por que usarmos framework para
isolar os mocks
● Definição
● Um isolation framework é um conjunto de APIs
programáveis que tornam a criação de objetos
mock e stub muito mais fácil. Esses frameworks
vem para salvar o desenvolvedor da necessidade
de escrever código repetitivo para testar ou simular
interações de objeto.
Frameworks Java
Mockito
● É um framework para criação de mocks em
sistema java, disponível em http://mockiyo.org
● Sua API é bastante intuitiva e de uso simples
● Um teste com mockito envolve basicamente:
● Criação de mocks
● Configuração de stubs
● Execução do SUT
● Verificação das alterações esperadas
Conhecendo um pouco mais da API
● Stubing - Laçando exceção
● doThrow(new
RuntimeException()).when(mockedList).clear();
mockedList.clear();
● when(mock.someMethod("some arg"))
.thenThrow(new
RuntimeException()).thenReturn("foo");
mock.someMethod("some arg");
Conhecendo um pouco mais da API
● Stubing - Uso de matchers
● when(mockedList.get(anyInt())).thenReturn("elemen
t");
//print “element”
System.out.println(mockedList.get(999));
verify(mockedList).get(anyInt());
● AnyString(), any(Class)
Por que usar Mockito?
● A diferença do Mockito em relação aos outros
está na sua filosofia simples “stub-run-verify”,
que se diferincia do EasyMock e Jmock, que
seguem a filosofia “expect-run-verify”.Está
ultima mistura conceitos de stub com
verificação no expect. Tornando o testes
menos claro e com necessidade de um número
maior de configurações.
Rferências
● Osherove, Roy. The art of unit testing : with
examples in .NET. 2009
● Meszaros, Gerard. XUnit test patterns :
refactoring test code. 2007

Weitere ähnliche Inhalte

Was ist angesagt?

Introdução a testes unitários automatizados com JUnit e NUnit
Introdução a testes unitários automatizados com JUnit e NUnitIntrodução a testes unitários automatizados com JUnit e NUnit
Introdução a testes unitários automatizados com JUnit e NUnit
elliando dias
 
Testes de Unidade com JUnit
Testes de Unidade com JUnitTestes de Unidade com JUnit
Testes de Unidade com JUnit
elliando dias
 
Apresentação lições aprendidas
Apresentação lições aprendidasApresentação lições aprendidas
Apresentação lições aprendidas
ricardojp
 

Was ist angesagt? (20)

Testes Unitários - 1 Sessão beiraJUG
Testes Unitários - 1 Sessão beiraJUGTestes Unitários - 1 Sessão beiraJUG
Testes Unitários - 1 Sessão beiraJUG
 
Introdução a testes unitários automatizados com JUnit e NUnit
Introdução a testes unitários automatizados com JUnit e NUnitIntrodução a testes unitários automatizados com JUnit e NUnit
Introdução a testes unitários automatizados com JUnit e NUnit
 
Testes O que são e para que servem? - LadyTalks
Testes O que são e para que servem? - LadyTalksTestes O que são e para que servem? - LadyTalks
Testes O que são e para que servem? - LadyTalks
 
PHPExperience 2016 - Pirâmide de Testes
PHPExperience 2016 - Pirâmide de TestesPHPExperience 2016 - Pirâmide de Testes
PHPExperience 2016 - Pirâmide de Testes
 
Junit 4.0
Junit 4.0Junit 4.0
Junit 4.0
 
Junit
JunitJunit
Junit
 
JUnit
JUnitJUnit
JUnit
 
Testes de Unidade com Junit
Testes de Unidade com JunitTestes de Unidade com Junit
Testes de Unidade com Junit
 
Introdução a testes unitários com jUnit
Introdução a testes unitários com jUnitIntrodução a testes unitários com jUnit
Introdução a testes unitários com jUnit
 
Testes com JUnit
Testes com JUnitTestes com JUnit
Testes com JUnit
 
JUnit
JUnitJUnit
JUnit
 
Testes de Unidade com JUnit
Testes de Unidade com JUnitTestes de Unidade com JUnit
Testes de Unidade com JUnit
 
Java 12
Java 12Java 12
Java 12
 
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
 
Desenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com JunitDesenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com Junit
 
Estudos Technocorp
Estudos TechnocorpEstudos Technocorp
Estudos Technocorp
 
Teste Estrutural usando a ferramenta Jabuti
Teste Estrutural usando a ferramenta JabutiTeste Estrutural usando a ferramenta Jabuti
Teste Estrutural usando a ferramenta Jabuti
 
Tratamento de exceções em Java
Tratamento de exceções em JavaTratamento de exceções em Java
Tratamento de exceções em Java
 
Palestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnitPalestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnit
 
Apresentação lições aprendidas
Apresentação lições aprendidasApresentação lições aprendidas
Apresentação lições aprendidas
 

Ähnlich wie Testes de Unidade - Unidade II

Mock it with mockito
Mock it with mockitoMock it with mockito
Mock it with mockito
Renan Uchôa
 
TDD no Community Launch 2010 - Christian Cunha
TDD no Community Launch 2010 - Christian CunhaTDD no Community Launch 2010 - Christian Cunha
TDD no Community Launch 2010 - Christian Cunha
Christian Cunha
 

Ähnlich wie Testes de Unidade - Unidade II (20)

Teste de Integração - Unidade III
Teste de Integração - Unidade IIITeste de Integração - Unidade III
Teste de Integração - Unidade III
 
TDD (Resumo)
TDD (Resumo)TDD (Resumo)
TDD (Resumo)
 
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
 
Mock it with mockito
Mock it with mockitoMock it with mockito
Mock it with mockito
 
Descomplicando os mocks
Descomplicando os mocksDescomplicando os mocks
Descomplicando os mocks
 
Testes
TestesTestes
Testes
 
Test driven development
Test driven developmentTest driven development
Test driven development
 
Mock objects - Teste de código com dependências
Mock objects - Teste de código com dependênciasMock objects - Teste de código com dependências
Mock objects - Teste de código com dependências
 
A importância dos testes unitários: do código legado ao pipeline de testes em...
A importância dos testes unitários: do código legado ao pipeline de testes em...A importância dos testes unitários: do código legado ao pipeline de testes em...
A importância dos testes unitários: do código legado ao pipeline de testes em...
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por Testes
 
Introdução a tdd
Introdução a tddIntrodução a tdd
Introdução a tdd
 
TDD com Python
TDD com PythonTDD com Python
TDD com Python
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
JUnit Sample
JUnit SampleJUnit Sample
JUnit Sample
 
TDD no Community Launch 2010 - Christian Cunha
TDD no Community Launch 2010 - Christian CunhaTDD no Community Launch 2010 - Christian Cunha
TDD no Community Launch 2010 - Christian Cunha
 
Testes unitários e Mocks
Testes unitários e MocksTestes unitários e Mocks
Testes unitários e Mocks
 
1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
Apresentação testes white box
Apresentação testes white boxApresentação testes white box
Apresentação testes white box
 

Testes de Unidade - Unidade II

  • 1. Curso de Testes Automatizados Unidade II Testes Unitarios
  • 2. Conteúdo Pragmático ● Unidade I ● Introdução a teste de software ● Introdução a automação de teste de software ● Básico sobre teste unitário ● Unidade II ● Técnicas de Teste Unitários ● TestNG ● Mockito ● Unidade III ● Testando com Banco de Dados ● DBUnit ● Testes Funcionais ● Selenium ● Unidade IV ● Princípios e Filosofia de Testes Automatizados ● Introdução ao TDD
  • 3. Agenda ● Técnicas de Teste Unitários ● TestNG ● Mockito
  • 4. Técnicas de Teste Unitários ● Stubs e como eles nós ajudam a quebrar as depêndencias ● Técnicas de refatoração para tornar o codigo mais testavel ● Mocks and Stubs
  • 5. Introdução a stubs ● Definições ● Uma dependência externa, é um objeto em seu sistema com o qual seu código sob teste interage , e sobre a qual você não tem controle. (Ex.: sistemas de arquivos, threads, memória, tempo, etc.) ● Um stub é um substituto controlável para uma dependência existente no sistema. Usando um stub, você pode testar seu código sem lidar com a dependência direta.
  • 6. Tecnicas para quebrar dependências ● Idetificando dependência ● Determinando como facilitar o teste ● Adicionando mais uma camada de indireção ● Refactoring do projeto para ser mais testavel ● Refactoring é o ato de mudança no design do código sem quebrar funcionalidade existente. ● Seams são lugares em seu código onde você pode conectar diferentes funcionalidades, atraves de stubs.
  • 7. Tecnicas para quebrar dependências ● Refactoring do projeto para ser mais testavel ● Extrair uma interface para permitir a substituição de execução subjacente. ● Injetar implementação de stub em uma classe sob teste. ● Receber uma interface ao nível do construtor. ● Receber uma interface como uma propriedade get ou set. ● Obter um stub pouco antes da chamada de método.
  • 8. Interação entre testes usando objetos mocks Como testar a chamada correta a outros objetos
  • 9. Testes baseados no estado vs Testes de interação ● Testes baseados no estado (também chamada de verificação de estado) determina se o método exercido funcionou corretamente, examinando o estado do sistema em teste e seus colaboradores (dependências) depois que o método é executado. ● Testes de interação é testar como um objeto envia ou recebe dados outros objetos com o qual interage.
  • 10. Mock Object ● Um mock object é um objeto falso no sistema que decide se o teste de unidade passou ou falhou. No sentido de verificar se o objeto em teste interagiu como esperado com o objeto falso. Há geralmente não mais do que um mock por teste.
  • 13. Usando mock e stub juntos Exemplo
  • 14. Um mock por teste ● Em um teste onde testamos apenas uma coisa (que é o recomendo), não deve haver mais de um objeto mock. Todos os outros objetos falsos atuaram como stubs. ● Tendo mais de um teste simulado por usualiado significa que você está testando mais de uma coisa, e isso pode levar a com-testes complicados ou frágil.
  • 15. Problemas em escrever mock e stubs manualmente ● Leva tempo para escrever o mocks e stubs. ● É difícil escrever stubs e mocks para as classes e interfaces quetem muitos métodos, propriedades e eventos. ● Para salvar o estado de várias chamadas de um método de simulação, você precisa escrever muito código para salvar os dados. ● Se você deseja verificar todos os parâmetros de uma chamada de método, você precisa escrever várias acersões. Se a primeira afirmação falhar, as outros nunca seram executadas, porque huve uma exceção. ● É difícil a reutilização de código simulado e stub para outros testes.
  • 16. Isolando mocks com os framwarks
  • 17. Por que usarmos framework para isolar os mocks ● Definição ● Um isolation framework é um conjunto de APIs programáveis que tornam a criação de objetos mock e stub muito mais fácil. Esses frameworks vem para salvar o desenvolvedor da necessidade de escrever código repetitivo para testar ou simular interações de objeto.
  • 19. Mockito ● É um framework para criação de mocks em sistema java, disponível em http://mockiyo.org ● Sua API é bastante intuitiva e de uso simples ● Um teste com mockito envolve basicamente: ● Criação de mocks ● Configuração de stubs ● Execução do SUT ● Verificação das alterações esperadas
  • 20. Conhecendo um pouco mais da API ● Stubing - Laçando exceção ● doThrow(new RuntimeException()).when(mockedList).clear(); mockedList.clear(); ● when(mock.someMethod("some arg")) .thenThrow(new RuntimeException()).thenReturn("foo"); mock.someMethod("some arg");
  • 21. Conhecendo um pouco mais da API ● Stubing - Uso de matchers ● when(mockedList.get(anyInt())).thenReturn("elemen t"); //print “element” System.out.println(mockedList.get(999)); verify(mockedList).get(anyInt()); ● AnyString(), any(Class)
  • 22. Por que usar Mockito? ● A diferença do Mockito em relação aos outros está na sua filosofia simples “stub-run-verify”, que se diferincia do EasyMock e Jmock, que seguem a filosofia “expect-run-verify”.Está ultima mistura conceitos de stub com verificação no expect. Tornando o testes menos claro e com necessidade de um número maior de configurações.
  • 23. Rferências ● Osherove, Roy. The art of unit testing : with examples in .NET. 2009 ● Meszaros, Gerard. XUnit test patterns : refactoring test code. 2007