2017-06-13 38 views
1

我想設置py.test,使得燈具B可以返回給定燈具A的值的可變數量的參數。讓我以當前實現爲例進行說明。對於三個對象中的每一個,我想測試可變數量的屬性。具有可變數量值的燈具取決於輸入

@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個有效的鍵,更多隻是將params添加到第二個燈具)。

如果這還不夠,你必須進入大聯盟,並編寫了一個名爲pytest_generate_tests一個pytest鉤,它可以讓你「定義自己的參數化方案」

文檔在(根據pytest文檔):https://docs.pytest.org/en/latest/example/parametrize.html

+0

是的,不幸的是,有效密鑰的數量是可變的。 –

相關問題