2017-06-13 19 views
1

フィクスチャBがフィクスチャAの値を指定して可変数のパラメータを返すことができるようにpy.testを設定したいと思います。 3つのオブジェクトのそれぞれについて、可変数の属性をテストしたいと思います。入力に応じて可変数の値を持つ器具

@pytest.fixture(params=[Object1(), Object2(), Object3()]) 
def my_object(request): 
    return request.param 


def test_keys(my_object): 
    for key in my_object.valid_keys: 
     assert getattr(my_object, key) > 0, "mock test failed" 

上記実装は、機能的であるが、試験したvalid_keysのテスト出力から見ることは容易ではありません。また、いずれかのテストが失敗した場合、後続のテストは実行されません。理想的には、以下のようなセットアップが必要です。

@pytest.fixture(params=[Object1(), Object2(), Object3()]) 
def my_object(request): 
    return request.param 


@pytest.fixture 
def valid_key(my_object): 
    # Return each valid key separately for each input object 


def test_keys(my_objects, valid_key): 
    assert getattr(my_object, valid_key) > 0, "mock test failed" 

この構造は、すべてのテストが独立して実行されていることを確認し、私はカバレッジを観察し、より簡単に私のテストを分析することができるようになるなど

答えて

0

あなたは正確あたりの有効なキーの数が同じがあることがわかっている場合あなたが書いたコードは完璧です。 (1つのオブジェクトにつき1つの有効なキーがあなたのものとまったく同じで、2つ目のフィクスチャにparamsを追加するだけです)。

これが十分でない場合、あなたは大きなリーグに入り、(pytestのドキュメントによれば)あなたは、「自分自身のパラメータ化スキームを定義する」ことができますpytest_generate_testsという名前pytestフックを、書かなければなりません

ドキュメントで:https://docs.pytest.org/en/latest/example/parametrize.html

+0

はい、残念ながら、有効なキーの数は可変です。 –

関連する問題