如何在Django中动态改变运行测试

时间:2014-01-23 18:52:38

标签: python django testing django-testing django-tests

我的测试课程如下:

class MyTestCase(django.test.TestCase):
    def setUp(sefl):
        # set up stuff common to ALL the tests

    @my_test_decorator('arg1')
    @my_test_decorator('arg2')
    def test_something_1(self):
        # run test

    def test_something_2(self):
        # run test

    @my_test_decorator('arg1')
    @my_test_decorator('arg2')
    def test_something_3(self):
        # run test

    ...

    def test_something_N(self):
        # run test

现在,@my_test_decorator是我做的装饰器,它执行内部更改以在运行时设置对测试环境的一些更改,并在测试完成后撤消此类更改,但我需要对特定的测试集执行此操作仅适用于所有情况,并且我希望将设置保持为所有测试,对于特定测试,可能会执行以下操作:

def setUp(self):
    # set up stuff common to ALL the tests
    tests_to_decorate = ['test_something_1', 'test_something_3']
    decorator_args = ['arg1', 'arg2']

    if self._testMethodNamein in tests_to_decorate:
        method = getattr(self, self._testMethodNamein)
        for arg in decorator_args:
            method = my_test_decorator(arg)(method)
        setattr(self, self._testMethodNamein, method)

我的意思是,不重复整个文件中的装饰器,但似乎测试运行器甚至在实例化测试类之前检索要运行的测试集,因此在__init__中执行此操作是没有用的或setUp方法。

如果没有方法可以实现这一目标会很好:

  1. 必须编写自己的测试跑步者
  2. 需要在两个或多个TestCase子类中拆分测试
  3. 在不同的班级重复setUp
  4. 创建一个托管setUp方法的类,让TestCase子类继承自此类
  5. 这甚至可能吗?

    谢谢! :)

0 个答案:

没有答案