通过python中的元类实现unittest中的ddt,实现代码如下:
import unittest
class MyMetaClass(type):
"""通过元类实现ddt"""
def __new__(cls, name, bases, attr, *args, **kwargs):
"""
name:类名
bases:类要继承的类
attr:类的属性或者类的方法
"""
# 创建新的类
new_cls = super().__new__(cls, name, (unittest.TestCase,), attr)
# 获取在类中定义的测试数据
data = attr['cases']
# 根据数据动态生成测试用例
for index,value in enumerate(data):
# 生成测试用例名
class_name="test_case_{}".format(index+1)
# 给类动态添加测试用例
new_method=cls.create_new_method(new_cls.test_demo,value)
setattr(new_cls,class_name,new_method)
delattr(new_cls,"test_demo")
return new_cls
@classmethod
def create_new_method(cls,method, value):
def wrapper(self):
method(self, value)
return wrapper
class Demo(metaclass=MyMetaClass):
cases = [
{"name": "fff", "age": 10},
{"name": "fff", "age": 10},
{"name": "fff", "age": 10},
{"name": "fff", "age": 10},
{"name": "fff", "age": 10},
]
def test_demo(self, items):
print(items)
unittest.main()