Sobes.tech
Senior

Como adicionar a limpeza da lista após a conclusão do teste? Qual é a diferença entre yield e AdFinalizer?

sobes.tech IA

Resposta da IA

Nos testes em Python usando pytest para limpar recursos após o teste, muitas vezes utiliza-se a construção com yield nos fixtures. O código antes de yield é executado antes do teste, e após yield — após o teste, o que é conveniente para limpar, por exemplo, uma lista.

Exemplo de fixture com limpeza de lista:

import pytest

@pytest.fixture
def my_list():
    lst = [1, 2, 3]
    yield lst
    lst.clear()  # Limpeza após o teste

AdFinalizer é um método no pytest que permite adicionar uma função de limpeza que será chamada após o teste. Pode ser usado dentro de um fixture através de request.addfinalizer(cleanup_func).

Diferenças entre yield e addfinalizer:

  • yield é uma forma mais legível e moderna de organizar setup/teardown em fixtures.
  • addfinalizer permite adicionar várias funções de limpeza dinamicamente.

Exemplo com addfinalizer:

import pytest

def cleanup():
    print("Limpeza após o teste")

@pytest.fixture
def my_resource(request):
    # setup
    request.addfinalizer(cleanup)
    return some_resource

De modo geral, yield é preferido para casos simples, addfinalizer para cenários mais complexos com múltiplos finalizadores.