【问题标题】:Chaining decorators with parameterized module使用参数化模块链接装饰器
【发布时间】:2021-07-13 12:45:36
【问题描述】:

我正在寻求针对特定问题的帮助。 我们正在编写测试套件,其中一个测试用例包含一个包含函数的类。这个函数是我们的测试用例。 测试用例由 htmltestrunner 执行。 如果某些测试用例针对不同的参数测试类似的行为,我们会在模块 parameterezy 的帮助下参数化这个测试用例 - 指定:使用 parameterize.expand 这是一个包装器。 现在,为了进行更有效的日志记录,我们想在一个名为扩展日志记录的单独模块中编写一个函数。这应该作为 PARAMETERIZED 函数的包装器。

这意味着: 参数化 -> WRAPS -> 高级日志记录 -> WRAPS -> 测试用例函数

不,我为我的高级日志功能编写了以下代码(仅用于调试和测试):

def decorator_func(func):
    print(Fore.RED +"Got into decorator_func")

    def wrapped_func(*args, **kwargs):
        print(Fore.GREEN + "Got into wrapped_func")
        
        try:
            print("Got in")
            retval = func(*args, **kwargs)
            print("Finished")

        except Exception as failure:

            print("FAILURE: " + str(failure))

            if type(failure) == AssertionError:
                print("ASSERTION ERROR")
                raise

            else:
                raise

        return retval
    return wrapped_func

当我不使用参数化包装器来参数化我的测试用例时,该函数起作用。 如果我使用参数化包装器,我会失败:'NoneType' 对象不可调用。

谁能帮帮我? 搜索了一整天。

编辑: 我已经发现,parameterized.expand 返回“NoneType Object”。有没有办法从 parameterized.expand 中获取修饰函数作为返回?

【问题讨论】:

    标签: unit-testing wrapper nonetype parameterized decorator-chaining


    【解决方案1】:

    我通过在我的内部函数上添加 @wrap(func) 解决了这个问题:

    def decorator_func(func):
        print(Fore.RED +"Got into decorator_func")
    
        @wrap(func)  
    
        def wrapped_func(*args, **kwargs):
            print(Fore.GREEN + "Got into wrapped_func")
            
            try:
                print("Got in")
                retval = func(*args, **kwargs)
                print("Finished")
    
            except Exception as failure:
    
                print("FAILURE: " + str(failure))
    
                if type(failure) == AssertionError:
                    print("ASSERTION ERROR")
                    raise
    
                else:
                    raise
    
            return retval
        return wrapped_func
    

    我不知道它为什么有效,但确实有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-12
      • 2017-03-22
      • 1970-01-01
      • 2019-01-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多