Post on 17-Apr-2015
PyUnit
O que é?
Framework de teste baseado no JUnit Versão atual 1.4.1
Download
Última versão: http://prdownloads.sourceforge.net/pyunit/pyunit-1.4.1.zip
Para versões do Python acima do 2.1 já está embutido
Usando o PyUnit
A classe chave é a TestCase do módulo unittest
Toda e qualquer classe de Teste deve estender ela
Exemplo de uma classe de teste
Usando o PyUnit
Da mesma forma que no JUnit podemos definir métodos setUp e tearDown
setUp e tearDown
Suíte de Testes
Várias são as formas: Criando as classes com nomes no
construtor Criando uma suíte genérica e
adicionando os testes Usando a função map
Suíte de Testes
Não criar uma suíte e usar o prefixo test antes de cada método para rodar no Eclipse
Melhor Solução: Criar um padrão para o nome dos métodos e usar o makesuite ]. Assim garantimos flexibilidade
Suíte de Testes
Assertions
Tipicamente usa-se o assert típico do Python
class WidgetTestCase(unittest.TestCase): def testDefaultSize(self): """Check that widgets are created with correct default size""" assert self.widget.size() == (50,50), 'incorrect default size'
Assertions
Problema: Se for necessário rodar o Python com otimização ligada os asserts típicos são pulados
Solução: Usar os métodos do PyUnit
Assertions
Outras formas de testar condições booleanas: Falha com condições verdadeiras
def runTest(self): self.failIf(self.widget.size() <> (100,100))
Assertions
assertEqual e assertNotEqual
def testSomething(self): self.widget.resize(100,100) self.assertEqual(self.widget.size, (100,100))
Assertions
O PyUnit fornece aliases para os métodos anteriores: assertEqual = failUnlessEqual assertNotEqual = failIfEqual
Assertions
Fail típico
def runTest(self): ... if not myObject.name = “Test”: self.fail("Wrong name") # or just 'self.fail()'
Exceções
Teste com Exceções Temos três soluções para testar situações
em que exceções esperadas não são lançadas
Exceções
Forma mais similar a Java
def runTest(self): try: self.widget.resize(-1,-1)
fail("expected a ValueError") except ValueError: pass
Exceções
Forma típica do Python
def runTest(self): try: self.widget.resize(-1,-1) except ValueError: pass else: fail("expected a ValueError")
Exceções
Usando o método do PyUnit
def runTest(self): self.assertRaises(ValueError, self.widget.resize, -1, -1)
Referências
http://pyunit.sourceforge.net/