私はpytestフィクスチャを使用していますが、以下はかなり似ていますが、最新の作品はかなり似ています。
はい、可読性はyield_fixureの方が優れていますが、正確に何が違うのかを誰かに教えてもらえますか。
以下のような場合、どちらを使用すればよいですか?
@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")
唯一の違いは読みやすさです。 (100%確実ではありませんが)基本的な動作は同じです(つまり、yield
ステートメントがファイナライザとして実行された後のクリーンアップ)。読みやすさのため、私は常に利回りフィクスチャを使用してクリーンアップすることを好みます。
Pytest <3.0を使用している場合でも、その動作を得るにはpytest.yield_fixture
を使用する必要があります。ただし、pytest 3.0以降を使用できる場合は、pytest.yield_fixture
は廃止され、pytest.fixture
を使用して同じyield_fixture
の動作を取得できます。
こちらが 説明ドキュメント です。
Pytest-3.0以降、通常のフィクスチャーデコレーターを使用するフィクスチャーは、yieldステートメントを使用して、以前のバージョンのyield_fixtureとまったく同じように、フィクスチャー値を提供し、分解コードを実行できます。
関数をyield_fixtureとしてマークすることは引き続きサポートされていますが、非推奨であり、新しいコードでは使用しないでください。
addfinalizer
には、歩留まりに対して2つの重要な違いがあります。
から pytest docs