Você está na página 1de 23

Curso de Testes Automatizados

Unidade II
Testes Unitarios

Contedo Pragmtico

Unidade I

Introduo a teste de software

Introduo a automao de teste de software

Bsico sobre teste unitrio

Unidade II

Tcnicas de Teste Unitrios

TestNG

Mockito

Unidade III

Testando com Banco de Dados

DBUnit

Testes Funcionais

Selenium

Unidade IV

Princpios e Filosofia de Testes Automatizados

Introduo ao TDD

Agenda

Tcnicas de Teste Unitrios

TestNG

Mockito

Tcnicas de Teste Unitrios

Stubs e como eles ns ajudam a quebrar as


depndencias
Tcnicas de refatorao para tornar o codigo
mais testavel
Mocks and Stubs

Introduo a stubs

Definies

Uma dependncia externa, um objeto em seu


sistema com o qual seu cdigo sob teste interage ,
e sobre a qual voc no tem controle. (Ex.:
sistemas de arquivos, threads, memria, tempo,
etc.)
Um stub um substituto controlvel para uma
dependncia existente no sistema. Usando um
stub, voc pode testar seu cdigo sem lidar com a
dependncia direta.

Tecnicas para quebrar


dependncias

Idetificando dependncia

Determinando como facilitar o teste

Adicionando mais uma camada de indireo

Refactoring do projeto para ser mais testavel

Refactoring o ato de mudana no design do


cdigo sem quebrar funcionalidade existente.
Seams so lugares em seu cdigo onde voc pode
conectar diferentes funcionalidades, atraves de
stubs.

Tecnicas para quebrar


dependncias

Refactoring do projeto para ser mais testavel

Extrair uma interface para permitir a substituio de


execuo subjacente.
Injetar implementao de stub em uma classe sob
teste.
Receber uma interface ao nvel do construtor.
Receber uma interface como uma propriedade get
ou set.
Obter um stub pouco antes da chamada de
mtodo.

Interao entre testes usando


objetos mocks

Como testar a chamada correta a outros objetos

Testes baseados no estado vs


Testes de interao

Testes baseados no estado (tambm chamada


de verificao de estado) determina se o
mtodo exercido funcionou corretamente,
examinando o estado do sistema em teste e
seus colaboradores (dependncias) depois que
o mtodo executado.
Testes de interao 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 no mais do que um
mock por teste.

Diferena entre mock e stubs

Diferena 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), no 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 frgil.

Problemas em escrever mock e


stubs manualmente

Leva tempo para escrever o mocks e stubs.


difcil escrever stubs e mocks para as classes e interfaces quetem
muitos mtodos, propriedades e eventos.
Para salvar o estado de vrias chamadas de um mtodo de
simulao, voc precisa escrever muito cdigo para salvar os dados.
Se voc deseja verificar todos os parmetros de uma chamada de
mtodo, voc precisa escrever vrias acerses. Se a primeira
afirmao falhar, as outros nunca seram executadas, porque huve
uma exceo.
difcil a reutilizao de cdigo simulado e stub para outros testes.

Isolando mocks com os framwarks

Por que usarmos framework para


isolar os mocks

Definio

Um isolation framework um conjunto de APIs


programveis que tornam a criao de objetos
mock e stub muito mais fcil. Esses frameworks
vem para salvar o desenvolvedor da necessidade
de escrever cdigo repetitivo para testar ou simular
interaes de objeto.

Frameworks Java

Mockito

um framework para criao de mocks em


sistema java, disponvel em http://mockiyo.org

Sua API bastante intuitiva e de uso simples

Um teste com mockito envolve basicamente:

Criao de mocks

Configurao de stubs

Execuo do SUT

Verificao das alteraes esperadas

Conhecendo um pouco mais da API

Stubing - Laando exceo

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 diferena do Mockito em relao 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
verificao no expect. Tornando o testes
menos claro e com necessidade de um nmero
maior de configuraes.

Rferncias

Osherove, Roy. The art of unit testing : with


examples in .NET. 2009
Meszaros, Gerard. XUnit test patterns :
refactoring test code. 2007

Você também pode gostar