Sobes.tech
Senior

Чӣ гуна тозакунии рӯйхатро пас аз анҷоми тест илова кардан мумкин аст? Фарқи байни yield ва AdFinalizer чист?

sobes.tech AI

Ҷавоб аз AI

Дар тестӣ дар Python бо истифода аз pytest барои тоза кардани захираҳо пас аз тест, одатан сохтани бо yield дар фикстураҳо истифода мешавад. Код дар назди yield пеш аз тест иҷро мешавад, ва пас аз yield — пас аз тест, ки барои тоза кардани рӯйхат, масалан, қулай аст.

Маслиҳат барои фикстура бо тоза кардани рӯйхат:

import pytest

@pytest.fixture
def my_list():
    lst = [1, 2, 3]
    yield lst
    lst.clear()  # Тоза пас аз тест

AdFinalizer як усул дар pytest аст, ки имкон медиҳад, ки функсияи тоза кардан илова шавад, ки пас аз тест даъват мешавад. Онро дар дохили фикстура тавассути request.addfinalizer(cleanup_func) истифода бурдан мумкин аст.

Фарқият байни yield ва addfinalizer:

  • yield роҳи хонданӣ ва муосиртар барои ташкил кардани setup/teardown дар фикстураҳо мебошад.
  • addfinalizer имкон медиҳад, ки чанд функсияи тоза карданро динамикӣ илова кунед.

Маслиҳат бо addfinalizer:

import pytest

def cleanup():
    print("Тоза пас аз тест")

@pytest.fixture
def my_resource(request):
    # танзимот
    request.addfinalizer(cleanup)
    return some_resource

Дар умум, yield барои ҳолатҳои оддӣ беҳтар аст, addfinalizer — барои сценарияҳои мураккаб бо чанд финализатор.