Você está na página 1de 21

Teste de Unidade (Unit Test)

Teste em Geral

Teste
Maneira de demostrar corretude do software
Fases
Teste de unidade

Teste de integrao e de sistema

Testar cada modulo (unidade ou componente)


Geralmente realizado pelos desenvolvedore dos mdulos
Testar o sistema como um todo
Geralmente realizado por equipe separada de teste

Teste de aceitao

Validar funes do sistema para/pelo cliente ou usurio

Introduo
Nveis de teste:
Componentes
individuais

Teste
Unitrio
Grupos de
componentes

Teste de
Integrao

Sistema
como um todo

Teste de
Sistema

Sistema como um todo


Requisitos do usurio

Teste de
Aceitao

O que teste de unidade

Definio
Teste o processo de demostrao que o
programa funcion para certas entradas

Uma unidade um mdulo ou um conjunto


pequeno de modulos

Em Java e Python uma unidade uma classe ou


interfaxe, ou um conjunto delas.

Questo

Voc obtem mais confidncia pela execuo de teste


com uma massa de teste maior?

Introduo

Uma unidade o menor componente de software que


se pode testar.
Em um sistema procedural:

Em um sistema orientado a objetos:

Funo ou procedure.
Uma classe (mtodo?)

Em qualquer um dos casos:

Um componente comprado de um terceiro e que est


sob avaliao.
Um componente que ser reusado a partir de uma
biblioteca desenvolvida pela prpria organizao

Introduo

No teste unitrio o componente de software


sendo testado relativamente pequeno:

fcil de projetar, executar, registrar e analisar os


resultados.
No caso de deteco de bugs fcil de localizar e
reparar (apenas uma unidade est sob anlise)

Introduo

Objetivo do teste unitrio:

Assegurar que cada unidade est funcionando de


acordo com sua especificao funcional.
Projetam-se testes para revelar defeitos relativos:

A descrio das funcionalidades.


Aos algoritmos.
Aos dados.
A lgica de controle.

Casos de teste so projetados usando-se tcnicas


de teste funcional e tcnicas de teste estrutural.

Introduo

Quem testa?

Desenvolvedor?

Desenvolvedor com auditoria peridica?

Testador independente?

Importante:

Projetar os testes antes do desenvolvimento do mdulo.


Os bugs encontrados devem ser registrados como parte da
histria do mdulo.

A informalidade na etapa de teste unitrio leva que um


nmero maior de bugs seja detectado nas etapas de teste
de integrao e teste de sistema onde o custo de
localizao e correo maior.

Introduo

Entradas para o teste unitrio:

Especificao do mdulo antes da implementao


do mesmo:

Desenvolvimento de casos de teste usando tcnicas


funcionais.
Fundamental como orculo.

Cdigo fonte do mdulo:

Desenvolvimento de casos de teste complementares


aps a implementao do mdulo usando tcnicas
estruturais.
No pode ser usado como orculo.

Introduo

Classes drivers

So as classes que contm os casos de teste.


Procuram exercitar os mtodos da classe alvo buscando
detectar falhas.
Normalmente: uma classe driver para cada classe do sistema.

Classes stub

Simulam o comportamento de classes necessrias ao


funcionamento da classe alvo e que ainda no foram
desenvolvidas.
Quando a classe correspondente ao stub estiver pronta ser
necessrio re-executar o driver que executou usando o stub.

Introduo

Processo para o desenvolvimento de casos de teste:


(a) Definir a interface pblica da classe alvo.

(b) Implementar o esqueleto da classe alvo.


(c) Definir que mtodos da classe alvo devem ser testados.
(d) Definir os casos de teste.
(e) Projetar/implementar a classe driver.
(f)

Projetar e implementar stubs se for o caso.

(g) Projetar e implementar a classe alvo.


(h) Executar os testes.
(i)

Analisar os resultados. Em caso de bugs, volta para o passo g.

(j)

Avaliar a cobertura dos casos de teste a luz do cdigo fonte.


Planejar e definir novos casos de teste se for o caso. Em caso
positivo, voltar para o passo c.

Introduo ao PyUnit

O que ?

Framework de teste baseado no JUnit

Verso atual 2.1

Introduo ao PyUnit

O que ?

Framework de teste baseado no JUnit

Verso atual 2.1

Para verses do Python acima do 2.1 j est


embutido

Usando o PyUnit

A classe chave a TestCase do mdulo


unittest
Toda e qualquer classe de Teste deve estender
ela

Modulo Unittest
Framework de teste de unidade para Python
Incluido desde a verso Python 2.1
Baseado em PyUnit

O qual foi baseado no Junit

Exemplo de PyUnit
Instalar PyUnit
Baixar unittest.py
Exemplo:

import unittest
class Test(unittest.TestCase):
def test_basic_addition(self):
self.failUnlessEqual(1+1,2)
if __name__=='__main__':
unittest.main()

Exemplo de PyUnit
O codigo a testar : example1.py
def reverse(aList):
aList.reverse()
return aList
O teste : example1_test.py

import unittest
class ReverseTests(unittest.TestCase):
def test_normal(self):
# do import here, makes test independent
from example1 import reverse
# can use python's normal asserts
assert reverse([1,2,3])==[3,2,1]
# or more robust and informative unittest options
self.assertEqual(reverse([1,2,3]),[3,2,1])

Mtodos teis
fail(mensagem)
assertEquals(x,y)
failUnless(expresso)
failIfExpression
assertRaises(Exception,callable, arg1, arg2,...)

Tenha certeza que esteja claro o porque tem


escrito o cdigo do teste que esta ali!

Continuando ...
Os testes de unidade deveriam ser:
Atmico
Independente
Discreto
Concorrente

Ou talvez no..

Como fazer isto?

Comear do zero para cada script

Escrever os testes cuidadosamente

Você também pode gostar