python - 如何在 Python (2.7) 单元测试中参数化 setUpClass()

标签 python unit-testing python-unittest

我目前正在实现一种在值之间进行插值、边界处理等的表格,并希望为其编写单元测试。

有很多可能的场景,例如表只能有一个/多个行/列和不同的边界条件。所有这些场景中的表都应该通过同一组单元测试。

现在,我正在为其中一种情况编写一个基类,并从中派生并重写 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/

相关文章:

php - 在 Laravel 4 单元测试中,如何在请求中设置 cookie?

unit-testing - 有人有在 Resharper 7 EAP 中运行的 Jasmine 单元测试吗?

python - 使用 requests_mock 断言 HTTP 请求的主体

python - 测试模拟是否与其他模拟一起调用

python - PyCharm 和 unittest 不会运行

python - 如何从测试内部访问 py.test capsys?

Python正则表达式匹配任何数字出现超过一定次数的情况

python - 如何在 Python (Trello) 中为 POST 函数编写单元测试?

python - pygame.time.wait() 使窗口卡住

python - 在 webhook 中解析 JSON