Sobes.tech
Senior

როგორ დავამატოთ სიის გასუფთავება ტესტის დასრულების შემდეგ? რა განსხვავებაა yield და AdFinalizer-ს შორის?

sobes.tech AI

პასუხი AI-სგან

პითონის 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-ის ორგანიზებისთვის fixture-ებში.
  • addfinalizer საშუალებას აძლევს დინამიკურად დაამატოთ რამდენიმე გასუფთავების ფუნქცია.

addfinalizer-ის მაგალითი:

import pytest

def cleanup():
    print("ტესტის შემდეგ გასუფთავება")

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

საერთო ჯამში, yield უპირატესია მარტივ შემთხვევებში, addfinalizer — უფრო რთული სცენარებისთვის, სადაც საჭიროა მრავალი ფინალიზატორი.