Skip to main content
 首页 » 编程设计

python之使用装饰器进行数据驱动测试

2025年05月04日7jirigala

我正在尝试使用装饰器对函数进行参数化。经过大量的打击和试验,我终于能够让它按预期运行。但我仍然不满意,好像它正在工作,这似乎不是正确的方法。

请帮我改进这段代码。

这是我的代码:

def WarmWelcome(fn): 
    def wrapped(DataProvider): 
       for name in DataProvider():  
         print fn(name) + ":)" 
    return wrapped 
 
def DataProvider(): 
    names=["abc","xyz","def"] 
    for name in names: 
        yield name 
 
@WarmWelcome 
def hello(name): 
    return "hello " +name 
 
hello(DataProvider)  

这是更新后的代码:

def WarmWelcome(DataProvider): 
  def real_decorator(fn): 
    def wrapped(): 
       for name in DataProvider():  
         print fn(name) + ":)" 
    return wrapped 
  return real_decorator 
 
def DataProvider(): 
    names=["abc","xyz","def"] 
    for name in names: 
        yield name 
@WarmWelcome(DataProvider) 
def hello(name): 
    return "hello " +name 
 
hello()  

请您参考如下方法:

也可以向 WarmWelcome 装饰器提供数据集权限:

def WarmWelcome(*data_sets): 
    def _decorator(func): 
        def _func(): 
            for ds in data_sets: 
                func(*ds) 
        return _func 
    return _decorator 
 
@WarmWelcome( 
    ("abc", ), 
    ("xyz", ), 
    ("def", ), 
) 
def hello(name): 
    return "hello " +name 

原文:PHPUnit-like dataProvider implementation for Python unittest