Sobes.tech
Senior

Test tamamlandıqdan sonra siyahını təmizləməni necə əlavə etmək olar? yield və AdFinalizer arasında fərq nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Python-da pytest istifadə edərək testdən sonra resursları təmizləmək üçün, tez-tez fixture-lərdə yield ilə quruluş istifadə olunur. yield-dən əvvəlki kod testdən əvvəl icra olunur, və yield-dən sonra — testdən sonra, bu, məsələn, siyahını təmizləmək üçün əlverişlidir.

Siyahını təmizləmək üçün fixture nümunəsi:

import pytest

@pytest.fixture
def my_list():
    lst = [1, 2, 3]
    yield lst
    lst.clear()  # Testdən sonra təmizləmə

AdFinalizer pytest-də testdən sonra çağırılacaq təmizləmə funksiyasını əlavə etməyə imkan verən bir metoddur. Bu, request.addfinalizer(cleanup_func) vasitəsilə fixture daxilində istifadə oluna bilər.

yieldaddfinalizer arasındakı fərqlər:

  • yield, fixture-lərdə setup/teardown təşkil etmək üçün daha oxunaqlı və müasir bir yoldur.
  • addfinalizer, dinamik olaraq çoxsaylı təmizləmə funksiyalarını əlavə etməyə imkan verir.

addfinalizer ilə nümunə:

import pytest

def cleanup():
    print("Testdən sonra təmizləmə")

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

Ümumiyyətlə, yield sadə hallarda üstün tutulur, addfinalizer isə daha mürəkkəb ssenarilər və çoxsaylı finalizatorlar üçün istifadə olunur.