2017-08-17 16 views
4

pytestのフィクスチャーを使っていますが、次のようなものがかなりよく似ています。pytestのfixtureとyield_fixtureの違い

はい、可読性は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") 
+0

'yield'フィクスチャは、フィクスチャ内のコンテキストマネージャを自然に使用します –

答えて

6

唯一の違いは読みやすさです。基本的な動作(つまり、yieldステートメントがファイナライザとして実行された後のクリーンアップ)が同じである(100%はわからないが)私はいつもクリーンアップのために歩留まり什器を使う方が好きです。

pytest < 3.0を使用している場合は、その動作を得るにはまだpytest.yield_fixtureを使用する必要があります。しかし、pytest 3.0+を使用できるのであれば、pytest.yield_fixtureは推奨されず、pytest.fixtureを使用して同じyield_fixtureの動作を得ることができます。ここ

the explanatory docsある:

pytest-3.0ので、通常の固定具デコレータを使用して器具を正確以前のバージョンでyield_fixtureよう 器具値を提供し、ティアダウンコードを実行するyield文、 を使用することができます。

yield_fixtureとしてのマーキング機能は引き続きサポートされていますが、新しいコードでは使用しないでください。

関連する問題