def wraper_func(test_func): @wraps(test_func) # @wraps:避免被装饰函数自身的信息丢失 def inner_func(self): failures = str([fail[0] for fail in self._outcome.result.failures]) if test_func.__name__ in failures: if self._id() == self._testMethodName: test = False else: test = True else: test = True return test(self) if inner_func(self) == True: return True else: return False 这个代码有错吗,怎么更改
时间: 2024-02-10 19:15:11 浏览: 61
wrapper-windows-x86-32-3.5.29.zip_wraper_wrapper 32
这段代码有一些问题。首先,在 `inner_func` 函数中,`test` 变量被赋值为一个布尔值,但在返回时却被当作了一个函数来调用。其次,在 `wraper_func` 函数中,`inner_func` 函数应该返回一个函数对象,而不是一个布尔值。
以下是更改后的代码:
```
from functools import wraps
def wraper_func(test_func):
@wraps(test_func)
def inner_func(self):
failures = str([fail[0] for fail in self._outcome.result.failures])
if test_func.__name__ in failures:
if self._id() == self._testMethodName:
test = lambda: False
else:
test = lambda: True
else:
test = lambda: True
return test
return inner_func(self)
# 测试
class Test:
def test_func(self):
return True
test = Test()
result = wraper_func(test.test_func)
print(result()) # 输出 True
```
在更改后的代码中,`inner_func` 函数返回一个匿名函数,该函数根据条件返回 `True` 或 `False`。在 `wraper_func` 函数中,我们调用 `inner_func` 并传入 `self` 参数,该参数在测试类的实例化对象中提供。然后,我们将返回的函数对象存储在 `result` 变量中,并在需要时调用它来执行测试。
阅读全文