Python AutoSpec zombando

Python AutoSpec zombando
“Ao desenvolver testes, zombaram e zombares são incrivelmente úteis, pois permitem separar a referência feita de suas dependências, resultando em menos testes frágeis. Ao incluir zombarias nos testes de unidade, podemos ter certeza de que quaisquer falhas serão causadas por uma modificação em como o objetivo do teste é implementado. A configuração das zombarias, no entanto, pode resultar em testes que passam quando precisam falhar. Neste artigo, usaremos alguns exemplos para ilustrar o funcionamento do AutoSpace zombando do Python.”

Exemplo 01

Vamos começar com a primeira ilustração. A calculadora.O módulo PY inclui as linhas de código subsequentes. Na primeira linha, definimos a adição da função e multiplicamos para a calculadora de classe. Dois números são multiplicados juntos usando a segunda função chamada "Multiply"; Da mesma forma, a primeira função é usada para obter a soma dos dois números. Ambas as funções retornam apenas a adição e alguns dos números fornecidos; Eles não imprimem nenhuma saída.

Construímos duas funções do módulo fora da classe em que os objetos de classe do tipo de calculadora são criados, e os métodos de adição e multiplicação da classe de calculadora são chamados. Verifique o código na imagem afixada.

A soma e as funções de multiplicação da calculadora.O módulo PY será usado no módulo direto que estamos construindo, calculadora de teste.py. O código é incrivelmente simples; Estamos apenas importando os métodos de multiplicação e soma do módulo da calculadora. Depois disso, executamos a função da soma e fornecemos os 2 e 5 como parâmetros.

Semelhante à maneira como chamamos a função de multiplicação, passamos os parâmetros 5 e 3 nesta função do módulo. Usando a declaração de impressão, exibimos a saída que essas funções retornam. Verifique o código na imagem afixada.

Execute o test_calculator.módulo py neste momento para ver os resultados. Embora você possa usar qualquer outra ferramenta, estamos escrevendo e executando o código usando a ferramenta Spyder 3. A saída no terminal da ferramenta Spyder é visível, como você pode ver. Usando a calculadora.Classe PY, a saída de multiplicação da função é 15 e sua saída de soma é 7, que é o resultado pretendido.

Exemplo 02

Agora vamos testar para soma e multiplicação, mas vamos supor que precisamos zombar da adição e multiplicar funções. Zombar e zombares são muito úteis quando estamos escrevendo testes para nossos módulos, porque eles nos permitem isolar as metas de teste de suas dependências que causam testes menos frágeis. Se empregarmos zombarias em nossos testes de unidade, qualquer teste que falhar o fará devido a uma modificação feita na implementação do alvo.

No entanto, podemos construir a maquete de uma maneira que possa impedir que os testes falhem quando devem! Vamos atualizar nosso test_calculator.módulo py para adicionar código de maquete a ele. O instantâneo de código é mostrado abaixo:

Quando executado, este teste fácil é bem -sucedido. Especificar implica a construção de um objeto simulado com a mesma API/estrutura que o objeto zombado, que falhará se for usado de uma maneira que se desvie da especificação. A função create_autospec no módulo simulado é o primeiro de dois métodos para realizar este. Vamos construir um objeto simulado usando a especificação da função fornecida. Verifique o código na imagem afixada.

Usando outro objeto como especificação, um objeto simulado é criado usando a função Create AutoSpec. A assinatura de todas as funções que são chamadas na simulação é verificada primeiro. Isso é vantajoso porque a função simulada agora depende da implementação real e encontraremos um problema se a versão mudar e a calculadora não respeitar as assinaturas dos dependentes.

Quando executamos a parte do código acima para o teste de unidade, não encontramos nenhum erro durante a execução. Isso significa que passamos no teste. Agora atualizamos o código e adicionamos apenas algumas linhas. Passamos a função de multiplicação para a função create_autospace e salvamos a saída da multiplicação. Verifique o código na imagem afixada.

Quando chamamos a função para multiplicar com um único parâmetro e executar o código, ele levanta um erro na tela de saída, conforme dado abaixo:

Se não passarmos nenhum parâmetro para esta função, ele solicita ao usuário que insira valores num1 e num2. Verifique o código na imagem afixada.

Aqui está a captura de tela da execução do código:

Quando passamos os dois argumentos num1 e num2, o teste acima é executado com sucesso; As mudanças nos códigos podem ser vistas na tela abaixo:

Como discutimos anteriormente, Create_autospec é um método para fazer isso, mas outro é definir o AutoSpec = true ao usar o decorador de patches para simular um objeto. Voltaremos ao módulo Test_Calculator e atualizaremos o código, conforme fornecido abaixo da captura de tela. As duas primeiras linhas já foram utilizadas em vários casos. O nome da função do módulo e o valor true para o AutSpec foram passados ​​para o @mock.Método do caminho na terceira linha de código.

Na direita abaixo, definimos uma função que é chamada de test_multiply onde passamos a variável de objeto simulado; Mais tarde, temos que usar a mesma variável para chamar a função de multiplicação. Há uma linha neste código que contém um erro que é o 6º linha porque temos que usar a função de maquete para operar em vez de usar diretamente a função de multiplicação. Verifique o código na imagem afixada.

Aqui está o código atualizado. Quando executamos este teste de unidade, não recebemos nenhum erro, o que significa que este teste é passado. Verifique o código na imagem afixada.

Conclusão

Trata -se do uso do python AutoSpec zombando de alguns de nossos exemplos de Python executados na ferramenta Spyder 3 Python. Todos os exemplos usados ​​neste artigo são fáceis de fazer e aprender. Então, tente não perder nenhum desses para entender melhor.