Sobes.tech
Senior

Ինչպե՞ս ավելացնել ցուցակի մաքրման գործընթացը թեստի ավարտից հետո: Ի՞նչ տարբերություն կա yield և AdFinalizer-ի միջև։

sobes.tech AI

Պատասխան AI-ից

Python-ում pytest օգտագործելով ռեսուրսների մաքրման համար թեստից հետո, հաճախ օգտագործվում է yield կառուցվածքը fixture-ներում: yield-ից առաջ գտնվող կոդը կատարվում է թեստից առաջ, իսկ yield-ից հետո — թեստից հետո, ինչը հարմար է օրինակ, ցանկի մաքրման համար:

Ցանկի մաքրման fixture-ի օրինակ:

import pytest

@pytest.fixture
def my_list():
    lst = [1, 2, 3]
    yield lst
    lst.clear()  # Մաքում թեստից հետո

AdFinalizer pytest-ի մեթոդ է, որը թույլ է տալիս ավելացնել մաքրման ֆունկցիա, որը կկոչվի թեստից հետո: Կարող եք օգտագործել fixture-ում request.addfinalizer(cleanup_func)-ի միջոցով:

yield և addfinalizer տարբերությունները՝

  • yield ավելի ընթեռնելի և ժամանակակից միջոց է setup/teardown կազմակերպելու համար fixture-ներում:
  • addfinalizer թույլ է տալիս դինամիկ ավելացնել մի քանի մաքրման ֆունկցիաներ:

addfinalizer-ի օրինակ՝

import pytest

def cleanup():
    print("Մաքում թեստից հետո")

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

Ընդհանուր առմամբ, yield նախընտրելի է պարզ դեպքերում, addfinalizer — ավելի բարդ սցենարների համար, երբ անհրաժեշտ է մի քանի ֆինալիզատոր: