我was given是一个类修饰器,用于在unittest中自动生成测试用例的编号,这就是修饰器:
def generate_test_numbers(test_class):
counter = 1
for method_name in dir(test_class):
if not method_name.startswith('test_n_'):
continue
method = getattr(test_class, method_name)
if not callable(method):
continue
new_method_name = method_name.replace('_n_', '_{:02d}_'.format(counter))
counter += 1
setattr(test_class, new_method_name, method)
delattr(test_class, method_name)
return test_class
我的问题是当我尝试在单元测试文件中运行类装饰器时:
import unittest
from generator import generate_test_numbers
@generate_test_numbers
class TestStringMethods(unittest.TestCase):
def test_n_remove(self):
print("1")
def test_n_add(self):
print("2")
def test_n_c(self):
print("3")
def test_n_d(self):
print("4")
def test_n_e(self):
print("5")
def test_n_f(self):
print("6")
def test_n_g(self):
print("7")
if __name__ == '__main__':
suite = unittest.TestLoader().loadTestsFromTestCase(TestStringMethods)
unittest.TextTestRunner(verbosity=2).run(suite)
我希望将test_n_remove作为第一个测试而不是最后一个:
test_01_add (__main__.TestStringMethods) ... 2
ok
test_02_c (__main__.TestStringMethods) ... 3
ok
test_03_d (__main__.TestStringMethods) ... 4
ok
test_04_e (__main__.TestStringMethods) ... 5
ok
test_05_f (__main__.TestStringMethods) ... 6
ok
test_06_g (__main__.TestStringMethods) ... 7
ok
test_07_remove (__main__.TestStringMethods) ... 1
ok