Senior
Kā pievienot saraksta tīrīšanu pēc testa pabeigšanas? Kāda ir atšķirība starp yield un AdFinalizer?
sobes.tech AI
Atbilde no AI
Testos Python ar pytest, lai pēc testa resursus notīrītu, bieži izmanto konstrukciju ar yield fixture-os. Kods pirms yield tiek izpildīts pirms testa, bet pēc yield — pēc testa, kas ir ērti, piemēram, saraksta notīrīšanai.
Piemērs fixture ar saraksta notīrīšanu:
import pytest
@pytest.fixture
def my_list():
lst = [1, 2, 3]
yield lst
lst.clear() # Notīrīšana pēc testa
AdFinalizer ir pytest metode, kas ļauj pievienot tīrīšanas funkciju, kas tiks izsaukta pēc testa. To var izmantot fixture iekšienē ar request.addfinalizer(cleanup_func).
Atšķirības starp yield un addfinalizer:
yieldir lasāmāks un mūsdienīgāks veids, kā organizēt setup/teardown fixture-os.addfinalizerļauj dinamiski pievienot vairākas tīrīšanas funkcijas.
Piemērs ar addfinalizer:
import pytest
def cleanup():
print("Tīrīšana pēc testa")
@pytest.fixture
def my_resource(request):
# setup
request.addfinalizer(cleanup)
return some_resource
Kopumā, yield ir priekšroka vienkāršos gadījumos, bet addfinalizer — sarežģītākos scenārijos ar vairākām pabeigšanas funkcijām.