Estrutura UnitTest - Estrutura
'unittest' suporta automação de teste, compartilhamento de configuração e código de desligamento para testes, agregação de testes em coleções e independência dos testes da estrutura de relatório.
O módulo unittest fornece classes que facilitam o suporte a essas qualidades para um conjunto de testes.
Para conseguir isso, o unittest suporta os seguintes conceitos importantes -
test fixture- Isso representa a preparação necessária para realizar um ou mais testes e quaisquer ações de limpeza associadas. Isso pode envolver, por exemplo, a criação de bancos de dados temporários ou proxy, diretórios ou o início de um processo de servidor.
test case- Esta é a menor unidade de teste. Isso verifica se há uma resposta específica a um determinado conjunto de entradas. unittest fornece uma classe base,TestCase, que pode ser usado para criar novos casos de teste.
test suite- Esta é uma coleção de casos de teste, suítes de teste ou ambos. Isso é usado para agregar testes que devem ser executados juntos. As suítes de teste são implementadas pela classe TestSuite.
test runner- Este é um componente que orquestra a execução de testes e fornece o resultado para o usuário. O executor pode usar uma interface gráfica, uma interface textual ou retornar um valor especial para indicar os resultados da execução dos testes.
Criando um Teste de Unidade
As etapas a seguir estão envolvidas na escrita de um teste de unidade simples -
Step 1 - Importe o módulo unittest em seu programa.
Step 2- Defina uma função a ser testada. No exemplo a seguir, a função add () deve ser submetida a teste.
Step 3 - Crie um caso de teste subclassificando unittest.TestCase.
Step 4- Definir um teste como método dentro da classe. O nome do método deve começar com 'teste'.
Step 5- Cada chamada de teste declara a função da classe TestCase. Existem muitos tipos de afirmações. O exemplo a seguir chama a função assertEquals ().
Step 6 - a função assertEquals () compara o resultado da função add () com o argumento arg2 e lança assertionError se a comparação falhar.
Step 7 - Finalmente, chame o método main () do módulo unittest.
import unittest
def add(x,y):
return x + y
class SimpleTest(unittest.TestCase):
def testadd1(self):
self.assertEquals(add(4,5),9)
if __name__ == '__main__':
unittest.main()
Step 8 - Execute o script acima a partir da linha de comando.
C:\Python27>python SimpleTest.py
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
Step 9 - Os três seguintes podem ser os resultados possíveis de um teste -
Sr. Não | Mensagem e descrição |
---|---|
1 | OK O teste passa. 'A' é exibido no console. |
2 | FAIL O teste não passa e gera uma exceção AssertionError. 'F' é exibido no console. |
3 | ERROR O teste levanta uma exceção diferente de AssertionError. 'E' é exibido no console. |
Esses resultados são exibidos no console por '.', 'F' e 'E' respectivamente.
Interface da Linha de comando
O módulo unittest pode ser usado a partir da linha de comando para executar testes únicos ou múltiplos.
python -m unittest test1
python -m unittest test_module.TestClass
python -m unittest test_module.TestClass.test_method
unittest suporta as seguintes opções de linha de comando. Para obter uma lista de todas as opções de linha de comando, use o seguinte comando -
Python –m unittest -h
Sr. Não | Opção e descrição |
---|---|
1 | -h, --help Mostrar esta mensagem |
2 | v, --verbose Saída detalhada |
3 | -q, --quiet Saída mínima |
4 | -f, --failfast Pare na primeira falha |
5 | -c, --catch Pegue o controle-C e exiba os resultados |
6 | -b, --buffer Buffer stdout e stderr durante as execuções de teste |