如何在setUpClass中使Python单元测试失败?
我正在用Python做一些单元测试,并在setUpClass
里进行一些预检查。我想知道如何在setUpClass
中抛出一个unitest
-fail
,就像下面这个简单的例子:
class MyTests(unittest.TestCase):
@classmethod
def setUpClass(cls):
unittest.TestCase.fail("Test")
def test1(self):
pass
if __name__ == '__main__':
unittest.main()
这个例子会报错TypeError: unbound method fail() must be called with TestCase instance as first argument (got str instance instead)
。
我明白我遇到的错误,因为fail
是一个实例方法,而我还没有MyClass
的实例。像这样临时使用实例:
unittest.TestCase().fail("Test")
也不行,因为unittest.TestCase
本身没有测试。有没有什么办法可以在setUpClass
中,当某个条件不满足时,让MyClass
中的所有测试都失败呢?
后续问题:有没有办法查看setUpClass
中的测试?
3 个回答
3
我不是Python方面的专家,但我遇到过同样的问题,我通过添加一个叫做cls的参数解决了这个问题:
...
@classmethod
def setUpClass(cls):
cls.fail(cls, "Test")
...
我觉得这样做有点奇怪,但更清楚了。
当你传入cls这个参数时,会出现一个警告(期望的类型是'TestCase',但得到了'Type[MyTests]'),而且MyTests是从TestCase继承的,所以可以忽略添加这个注释:# noinspection PyTypeChecker
50
使用一个简单的断言应该可以解决问题
assert False, "I mean for this to fail"
71
在你的 setUp 实例方法里放入 self.fail("test")
会导致所有测试都失败。
我觉得在类级别上,最简单的方法是创建一个类变量,可以这样做:
@classmethod
def setUpClass(cls):
cls.flag = False
def setUp(self):
if self.flag:
self.fail("conditions not met")
希望这正是你想要的。