如何解决带有参数化模块的链接装饰器
我正在寻求针对特定问题的帮助。 我们正在编写测试套件,其中测试用例包含一个包含函数的类。这个函数是我们的测试用例。 测试用例由 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 对象”。有没有办法从 parameterized.expand 中获取装饰函数作为返回?
解决方法
我通过在内部函数上添加 @wrap(func) 解决了这个问题:
p-tag
我不知道它为什么有效,但确实如此。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。