3. O que é Unit Test?
1 #coding: utf-8
2
3 def saudar(nome):
4 return u'Olá, %s.' % nome
5
6
7 # garantir que o nome do fulano passado como
8 # argumento seja utilizado na saudação
9 assert saudar('Gustavo') == u'Olá, Gustavo.'
10
11 # garantir que seja retornado um objeto unicode
12 assert isinstance(saudar('foo'), unicode)
Unidade objeto dos testes
Casos de teste
4. O framework de unit tests deve...
● Garantir o isolamento dos testes
● Facilitar a configuração do ambiente
● Fomentar a organização dos testes
● Executar os testes
● Produzir relatórios úteis
5. 1 #coding: utf-8
2 import unittest
3
4
5 def saudar(nome):
6 return u'Olá, %s.' % nome
7
8
9 class SaudarTests(unittest.TestCase):
10
11 def test_nome_do_fulano_seja_utilizado_na_saudacao(self):
12 self.assertEqual(saudar('Gustavo'), u'Olá, Gustavo.')
13
14 def test_objeto_retornado_tipo_unicode(self):
15 self.assertIsInstance(saudar('foo'), unicode)
Resumo da execução
dos testes
Casos de teste são
agrupados em
subclasses de
unittest.TestCase
O ambiente pode ser
preparado por meio
dos métodos setUp e
tearDown
unittest (stdlib)
http://docs.python.org/2.7/library/unittest.html
6. E quando há colaboração?
1 class Motor(object):
2 def __init__(self):
3 self.ligado = False
4
5 def ligar(self):
6 self.ligado = True
7
8 def desligar(self):
9 self.ligado = False
10
11
12 class Carro(object):
13 def __init__(self):
14 self.motor = Motor()
15
16 def dar_partida(self):
17 self.motor.ligar()
18
19 def esta_ligado(self):
20 return self.motor.ligado
21
22 def andar(self):
23 if self.esta_ligado():
24 print 'Andando... uhul!'
25 else:
26 raise RuntimeError('o carro precisa estar ligado para
andar.')
Composição
Unit testing é um método onde unidades de código fonte (funções, procedures, classes, módulos) são testadas para garantir seu funcionamento conforme o esperado. Para cada unidade de código fonte, são verificados N casos de teste. Sendo cada um chamado de Unit Test. A melhor tradução para pt-br é Teste de Unidade, e não Teste Unitário. Nem todas as unidades são tão simples de serem testadas. Algumas necessitam um estado global específico para que os casos de teste possam ser reproduzidos. Outras alteram o estado de objetos ou o estado global.
A analogia das caixas é relativa à camada da aplicação que é objeto de teste. Do ponto de vista de um testador humano, virtualmente todos os testes de unidade são de caixa branca.