Olá, Anderson. Belezinha?
Nesse exemplo que você apresentou não é interessante utilizar um laço for para testar diferentes valores. Isso porque quanto mais testes você tiver em um único método de teste, mais difícil será identificar qual teste falhou em caso de erro. Portanto, é recomendável que você crie um método de teste separado para cada cenário que deseja testar.
Para evitar escrever várias vezes um mesmo teste que possua a mesma lógica, alterando apenas os valores testados no método, é possível utilizar testes parametrizados. Isso permite com que você escreva um único teste e realize o teste para uma lista de valores que será passado como parâmetros do método de teste.
Para entender melhor como os testes parametrizados funcionam, vamos para um exemplo bem simples. Suponha que você queira testar um método de soma de um projeto de calculadora. Assim, teremos um arquivo calculadora.py
com o seguinte método soma
:
def soma(self, primeiro_valor, segundo_valor):
return self.primeiro_valor + self.segundo_valor
Para realizar o teste parametrizado, no arquivo de teste, primeiro criamos uma lista de valores que serão testados. Chamaremos essa lista de PARAMETROS_SOMA
. Ela possuirá tuplas onde os valores representam respectivamente, o primeiro e segundo valor da soma, e por fim o resultado dessa soma.
import pytest
from calculadora import soma
PARAMETROS_SOMA = [
(2, 3, 5),
(10, -5, 5),
(-5, -2, -7)
]
Agora, utilizamos o marcadorparametrize
, e passamos para ele como paramentos uma string que possui os nomes das nossas variáveis de teste separados por vírgula, e o vetor que possui nossos valores. Isso indicará que o método escrito a seguir é um teste parametrizado. Por fim, escrevemos o método do teste que recebe essas variáveis que definimos anteriormente.
@pytest.mark.parametrize("primeiro_valor, segundo_valor, resultado_esperado", PARAMETROS_SOMA)
def test_calcula_soma(self, primeiro_valor, segundo_valor, resultado_esperado):
resultado = soma(primeiro_valor, segundo_valor)
assert resultado == resultado_esperado
Desse modo, quando os testes forem executados, vai ser como se tivéssemos definido três funções de teste. Assim, fica fácil identificar aonde está o erro, caso algum teste falhe.
Não é necessário testar todas as situações possíveis em um teste. No exemplo acima, escolhemos testar três situações de soma: a primeira com números positivos, a segunda com um número positivo e outro negativo, e por último a soma entre dois números negativos.
Quando escrevemos nossos testes, o importante é pensar nos diferentes cenários possíveis. Especialmente aqueles que podem gerar algum erro. Garantindo assim, que cada cenário está sendo testado pelo menos uma vez.
Deixo como recomendação de leitura a documentação oficial do Pytest sobre testes parametrizados, para que você possa se aprofundar mais no assunto:
Espero ter ajudado. Qualquer outra dúvida estou a disposição.
Abraços. Bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!