2012-02-24 114 views
6

我使用了一組python單元測試,這些測試目前使用構建在測試框架中的pythons來構建。我想編寫基於我提供的數據集執行多次的參數化測試。在python中參數化單元測試

即。如果我的數據集是[1,2,3,4],我的測試函數將使用我的數據集中的輸入運行四次。

def test(data): 
    if data > 0: 
     #Pass the test 

從我的理解,目前在內置框架中是不可能的,除非我在我的測試函數中放置了一個循環。我不想這樣做,因爲即使一個輸入失敗,我也需要測試繼續執行。

我已經看到可以使用鼻子或pyTest。哪個是最好的框架?我還有另外一個框架可以比這兩個框架都好嗎?

在此先感謝!

回答

6

請注意,這恰恰是最近添加funcargs的最常見用法之一,其中py.test

在你的情況,你會得到:

def pytest_generate_tests(metafunc): 
    if 'data' in metafunc.funcargnames: 
     metafunc.parametrize('data', [1,2,3,4]) 

def test_data(data): 
    assert data > 0 

[編輯]我也許應該補充一點,你也可以做,因爲僅僅作爲

@pytest.mark.parametrize('data', [1,2,3,4]) 
def test_data(data): 
    assert data > 0 

所以我想說的是PY .test是參數化單元測試的一個很好的框架...

1

可以動態地根據你的數據通過以下方式設置創建測試:

import unittest 

data_set = [1,2,3,4] 

class TestFunctions(unittest.TestCase): 
    pass # all your non-dynamic tests here as normal 

for i in data_set: 
    test_name = "test_number_%s" % i # a valid unittest test name starting with "test_" 
    def dynamic_test(self, i=i): 
     self.assertTrue(i % 2) 
    setattr(TestFunctions, test_name, dynamic_test) 

if __name__ == '__main__': 
    unittest.main() 

問題Python unittest: Generate multiple tests programmatically?有這更多的討論,包括another approach通過動態創建測試的多個實例實現同樣的事情案件進入測試套件。