4
respostas

Testando um programa com pytest

Fiz o programa abaixo para verificar se um número é primo e aprender a utilizar o pytest no pycharm:

def primos(n):
    #primos = []
    cont = 0
    for i in range(2,int(n**0.5)+1):
        if n % i == 0:
            cont += 1
    #print(cont)
    if cont == 0:
        return True
    else:
        return False

Peguei a lista abaixo para aprender a utlizar o pytest. Propositadamente, inseri o número 62 no final da lista de primos para ver se dava erro:

n_primos = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997,62]

for i in n_primos:
    def test_primos():
        assert primos(i) == True

Realmente o teste falhou mas o pytest nao me informou que a falha ocorreu com o número 62... Existe alguma maneira melhor de fazer este tipo de teste? Imagine que tivesse no meio da lista um número nao primo que eu não soubesse.... Eu nunca descobriria em que ponto o teste falhou...

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

4 respostas

Você poderia criar uma variável contadora pra preencher um vetor vazio, quando desse o erro, ou seja, if n % i == 0 preenchia aquela posição do vetor com 0 e quando desse certo preenchia com 1, depois você relacionava quais posições desse vetor tem valor 1 e buscava essa posição na lista de números.

bom dia, Giovanni Vieira Pinto. Entendi sua ideia. EU achei que o pytest faria isso...

Eu não tenho certeza se ele faz ou não, eu nunca usei o pytest e.e

Obrigado, Giovanni Vieira Pinto. A ideia era utilizar algum framework de testes automatizados.