Πώς προσθέτετε καθαρισμό της λίστας μετά την ολοκλήρωση της δοκιμής; Ποια είναι η διαφορά μεταξύ yield και AdFinalizer;
sobes.tech AI
Απάντηση από AI
Στις δοκιμές σε Python με pytest για τον καθαρισμό πόρων μετά τη δοκιμή, συχνά χρησιμοποιείται η κατασκευή με yield στα fixtures. Ο κώδικας πριν από το yield εκτελείται πριν από τη δοκιμή, και μετά το yield — μετά τη δοκιμή, κάτι που είναι βολικό για τον καθαρισμό, π.χ., μιας λίστας.
Παράδειγμα fixture με καθαρισμό λίστας:
import pytest
@pytest.fixture
def my_list():
lst = [1, 2, 3]
yield lst
lst.clear() # Καθαρισμός μετά τη δοκιμή
Το AdFinalizer είναι μια μέθοδος στο pytest που επιτρέπει την προσθήκη μιας λειτουργίας καθαρισμού που θα καλείται μετά τη δοκιμή. Μπορεί να χρησιμοποιηθεί μέσα σε fixture μέσω request.addfinalizer(cleanup_func).
Διαφορές μεταξύ yield και addfinalizer:
- Το
yieldείναι ένας πιο ευανάγνωστος και σύγχρονος τρόπος οργάνωσης του setup/teardown σε fixtures. - Το
addfinalizerεπιτρέπει την προσθήκη πολλαπλών λειτουργιών καθαρισμού δυναμικά.
Παράδειγμα με addfinalizer:
import pytest
def cleanup():
print("Καθαρισμός μετά τη δοκιμή")
@pytest.fixture
def my_resource(request):
# setup
request.addfinalizer(cleanup)
return some_resource
Γενικά, το yield προτιμάται για απλές περιπτώσεις, το addfinalizer — για πιο σύνθετα σενάρια με πολλαπλούς τελικούς χειριστές.