2012-05-05 73 views
7

比方說,我有這方面的測試功能:如果另一個測試用py.test失敗,我該如何跳過測試?

def test_function_one(): 
    assert # etc... 

def test_function_two(): 
    # should only run if test_function_one passes 
    assert # etc. 

我怎樣才能確保test_function_two只有test_function_one通過(我希望這是可能的)運行?

編輯: 我需要這個,因爲測試二使用的是測試人員驗證的屬性。

+1

你能解釋一下你爲什麼需要這個?第一個測試是否設置了第二個測試用途?這通常很糟糕。 – loganfsmyth

+1

這通常是一個脆弱測試的標誌,這個測試依賴於比測試的單元更多的東西,你確定*你需要這樣做嗎?它可能(可能)更好地重構測試中的代碼和/或代碼以避免這種依賴性。 –

+0

@loganfsmyth沒有第一個測試沒有設置任何東西,但第二個測試*使用第一個測試驗證的屬性。 –

回答

0

我想這是你想要什麼:

def test_function(): 
    assert # etc... 
    assert # etc... 

這符合你的要求,即第二次「測試」(斷言)只運行如果第一個「測試」(斷言)通過。

1

我認爲yout的解決方案是模擬test1設置的值。

理想情況下,測試應該是獨立的,所以嘗試嘲笑該值,以便隨時可以運行test2,事實上,您還應該模擬(模擬)骯髒值,以便您可以看到test2在接收到意外數據時的行爲。

1

您可以使用名爲pytest-dependency的pytest插件。

的代碼可以是這樣的:

import pytest 
import pytest_dependency 

@pytest.mark.dependency() #First test have to have mark too 
def test_function_one(): 
    assert 0, "Deliberate fail" 

@pytest.mark.dependency(depends=["test_function_one"]) 
def test_function_two(): 
    pass #but will be skipped because first function failed 
相關問題