Sobes.tech
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:

  • yield ir 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.