Je passe par des montages pytest, et ce qui suit est assez similaire, les derniers travaux sont assez similaires.
Oui, la lisibilité est meilleure dans yield_fixure, mais quelqu'un pourrait-il me faire savoir quelle est exactement la différence.
lequel dois-je utiliser, dans les cas mentionnés ci-dessous?
@pytest.fixture()
def open_browser(request):
print("Browser opened")
def close_browser():
print("browser closed")
request.addfinalizer(close_browser)
return "browser object"
@pytest.yield_fixture()
def open_browser():
print("Browser opened")
yield "browser object"
print("browser closed")
def test_google_search(open_browser):
print(open_browser)
print("test_google_search")
La seule différence réside dans la lisibilité. Je pense (bien que je ne sois pas sûr à 100%) que le comportement sous-jacent soit identique (c'est-à-dire que le nettoyage après que l'instruction yield
soit exécutée en tant que finaliseur). Je préfère toujours utiliser des fixations de rendement pour le nettoyage, car c'est plus lisible.
Si vous utilisez pytest <3.0, vous devrez toujours utiliser pytest.yield_fixture
pour obtenir ce comportement. Mais si vous pouvez utiliser pytest 3.0+, pytest.yield_fixture
est obsolète et vous pouvez utiliser pytest.fixture
pour obtenir le même yield_fixture
comportement.
Voici les documents explicatifs :
Depuis pytest-3.0, les luminaires utilisant le décorateur de luminaire normal peuvent utiliser une déclaration de rendement pour fournir des valeurs de luminaire et exécuter du code de démontage, exactement comme yield_fixture dans les versions précédentes.
Le marquage des fonctions comme yield_fixture est toujours pris en charge, mais déconseillé et ne doit pas être utilisé dans le nouveau code.
addfinalizer
présente deux différences clés par rapport au rendement: