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 — ավելի բարդ սցենարների համար, երբ անհրաժեշտ է մի քանի ֆինալիզատոր: