gpt4 book ai didi

python - 如果我之前评估的属性不是 True,我如何装饰 Python unittest 方法以跳过?

转载 作者:太空狗 更新时间:2023-10-29 17:45:54 25 4
gpt4 key购买 nike

我正在使用 unittest 在 Python 中编写一个测试用例,看起来像这样:

class MyTestCase(unittest.TestCase):
def setUp(self):
# ... check if I'm online - might result in True or False
self.isOnline = True

@unittest.skipIf(not self.isOnline, "Not online")
def test_xyz(self):
# do a test that relies on being online

但是,这似乎不起作用,我认为是因为 @skipIf 不能在函数声明的主体之外使用 self。我知道我可以在 test_xyz 函数中检查 self.isOnline 的值并改用 skipTest ,但这不太优雅。还有其他选择吗?

最佳答案

您可以编写自己的装饰器,将标志的名称传递给它:

def skipIfTrue(flag):
def deco(f):
def wrapper(self, *args, **kwargs):
if getattr(self, flag):
self.skipTest()
else:
f(self, *args, **kwargs)
return wrapper
return deco

然后在你的类中你会像这样定义测试方法:

@skipIfTrue('isOnline')
def test_thing(self):
print("A test")

这是否比仅检查方法更好取决于具体情况。如果您使用多种方法来执行此操作,则可能比在每个方法中都写支票要好。另一方面,如果您这样做,您可能希望将它们组合在一起并进行一次检查以跳过整个套件。

关于python - 如果我之前评估的属性不是 True,我如何装饰 Python unittest 方法以跳过?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27533123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com