1

我的测试课程如下:

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__orsetUp方法中这样做是没有用的。

如果没有以下方法可以做到这一点,那就太好了:

  1. 必须编写我自己的测试运行器
  2. 需要将测试拆分为两个或多TestCase个子类
  3. setUp在不同的班级重复
  4. 创建一个承载该setUp方法并让TestCase子类从此类继承的类

这甚至可能吗?

谢谢!!:)

4

0 回答 0