Sobes.tech
Junior — Middle

Kaip užtikrinti, kad fixture būtų iškviesta po testo ar skripto pabaigos?

sobes.tech AI

Atsakymas iš AI

Siekiant užtikrinti, kad po testo ar skripto pabaigos būtų iškviesta valymo funkcija, paprastai naudojami teardown arba finalizatoriaus mechanizmai, kurie garantuoja valymo kodo vykdymą nepriklausomai nuo testo rezultato.

Populiariuose testų karkasuose tai įgyvendinama per specialius metodus arba dekoratorius:

  • pytest galima naudoti fixture su parametru yield:
import pytest

@pytest.fixture
def resource():
    # nustatymas
    res = acquire_resource()
    yield res
    # valymas
    release_resource(res)
  • unittest (Python) atveju, tearDown() metodas kviečiamas po kiekvieno testo:
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))
  • Java su JUnit, naudojamos anotacijos @After arba @AfterEach:
@After
public void tearDown() {
    releaseResource();
}

Šiuo būdu, valymo arba išlaisvinimo blokas garantuotai vykdomas po testo, net jei testas nepavyko su klaida.