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 — უფრო რთული სცენარებისთვის, სადაც საჭიროა მრავალი ფინალიზატორი.