Sobes.tech
Senior

Πώς προσθέτετε καθαρισμό της λίστας μετά την ολοκλήρωση της δοκιμής; Ποια είναι η διαφορά μεταξύ 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 — για πιο σύνθετα σενάρια με πολλαπλούς τελικούς χειριστές.