我的测试课程如下:
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
方法中这样做是没有用的。
如果没有以下方法可以做到这一点,那就太好了:
- 必须编写我自己的测试运行器
- 需要将测试拆分为两个或多
TestCase
个子类 setUp
在不同的班级重复- 创建一个承载该
setUp
方法并让TestCase
子类从此类继承的类
这甚至可能吗?
谢谢!!:)