Sobes.tech
Junior — Middle

Come garantire la chiamata della fixture dopo la fine dell'esecuzione del test o dello script?

sobes.tech AI

Risposta dell'AI

Per garantire la chiamata alla funzione di pulizia dopo la fine del test o dello script, si utilizzano generalmente meccanismi di teardown o finalizzatori, che garantiscono l'esecuzione del codice di pulizia indipendentemente dal risultato del test.

Nei framework di test popolari, ciò si realizza tramite metodi speciali o decoratori:

  • In pytest si può usare una fixture con il parametro yield:
import pytest

@pytest.fixture
def resource():
    # setup
    res = acquire_resource()
    yield res
    # teardown
    release_resource(res)
  • In unittest (Python), il metodo tearDown() viene chiamato dopo ogni test:
import unittest

class MyTest(unittest.TestCase):
    def setUp(self):
        self.res = acquire_resource()

    def tearDown(self):
        release_resource(self.res)

    def test_something(self):
        self.assertTrue(use_resource(self.res))
  • In Java con JUnit, si usano le annotazioni @After o @AfterEach:
@After
public void tearDown() {
    releaseResource();
}

In questo modo, la funzione o risorsa di pulizia viene liberata in un blocco che viene eseguito garantitamente dopo il test, anche se il test fallisce con un errore.