我目前正在实现一种在值之间进行插值、边界处理等的表格,并希望为其编写单元测试。
有很多可能的场景,例如表只能有一个/多个行/列和不同的边界条件。所有这些场景中的表都应该通过同一组单元测试。
现在,我正在为其中一种情况编写一个基类,并从中派生并重写 setUpClass()
方法。然而,这对于测试所有组合来说是乏味的。
是否可以生成 TestCase 类,使用不同的参数动态运行它们。
在谷歌搜索问题时,我发现最好的事情是重载 load_tests()
并一一添加所有测试方法(这意味着在运行每个测试方法之前设置对象,而不是每个测试方法一次场景)。
最佳答案
感谢@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
这样,测试用例就会使用不同的参数动态创建,并在 PyCharm 的测试运行选项卡中单独列出。
关于python - 如何在 Python (2.7) 单元测试中参数化 setUpClass(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33260214/