2015-10-21 52 views
0

我目前正在實施的一種表的內容與價值之間的插值,邊界處理等方面,並希望編寫單元測試它。如何在Python參數化setUpClass()(2.7)單元測試

有很多可能的場景,例如這些表格可能只有一個/多個行/列和不同的邊界條件。所有這些場景中的表都應該通過同一組單元測試。

現在我正在寫一個基類的案件之一,並從它重寫setUpClass()方法獲得。然而,這對於測試所有組合來說是很繁瑣的。

有生成測試用例類動態地使用不同的參數運行它們。

當用谷歌搜索這個問題時,我發現最好的東西是超載load_tests()並逐個添加所有測試方法(這意味着在運行每個測試方法之前設置對象而不是每個方案一次)。

+1

爲什麼不寫一個類工廠,基於該方案的具體要求'setUpClass'創建你的主要測試類的子類? – jonrsharpe

+0

您可以使用[鼻子測試生成器](http://nose.readthedocs.org/en/latest/writing_tests.html#test-generators)或[pytest參數化方法](https:// pytest)創建參數化測試序列。組織/最新/ parametrize.html)。 –

+0

@jonrsharpe這工作。我沒有想到的主要原因是我不知道如何讓PyCharm(或'unittest discover')知道創建的類。我現在設法使用'load_tests()'來完成它。 – Tim

回答

1

感謝@jonrsharpe的提示,我設法做到了。

我的解決方案是動態創建的類,然後將它們添加到使用load_tests TestSuite的:

def create_test_case(testcase_name, scenario_data): 
    class ScenarioTestCase(BaseTestCase): 
     @classmethod 
     def setUpClass(cls): 
      cls.fillClassVariables(scenario_data) 
    return_class = ScenarioTestCase 
    return_class.__name__ = testcase_name #for separating the results 
    return return_class 


def load_tests(loader, tests, pattern): 
    list_scenario_names = [...] 
    list_scenario_data = [...] 

    loader = unittest.TestLoader() 
    tests = TestSuite() 
    for scenario_name, scenario_data in zip(list_scenario_names, list_scenario_data): 
     tests.addTests(loader.loadTestsFromTestCase(
      create_test_case(scenario_name, scenario_data))) 
    return tests 

這樣的TestCase對象與不同的參數,動態創建和PyCharm的測試運行選項卡單獨列出。

+0

我可能會傾向於有元組'[(scenario_name,scenario_data),...]'的列表,以保持名稱和數據一起,但否則很好! – jonrsharpe