unittest类和普通类,使用时候一定别踩这个坑!

2022-05-18 21:00:30 浏览数 (1)

unittest是python中的一个单元测试框架。

新手容易忽略以下俩个情况

1.classmethod

classmethod经过实测,发现在unittest中可以装饰setUpClass(cls)

且在setUpClass中直接就可以定义类变量,且类变量可以在所有用例方法中调用,注意仅仅是调用

2.用例方法之间是平行宇宙

什么意思?就是test0里面 定义的变量,哪怕定义成类变量。都不能在test1中直接调用。

如:

代码语言:javascript复制
def test0(self):
  self.b = 5
def test1(self):
  pring self.b

这个运行起来之后,虽然会先执行test0,但是运行到test1时 会报错类变量里根本没有b

这点是和普通类方法截然相反的,普通类方法,是可以输出b=5的

还有,在unittest中的用例方法中,是没办法强行修改在setUpClass中定义的类变量的。就算你改了类变量的值,当这条用例执行结束,其他用例调用类变量时会发现,类变量的值又回到类最初始。这个情况 在你这个用例方法内执行甚至循环执行的时候,类变量都是随意改变叠加的,但是一旦用例执行结束,类变量都会初始化。这点和普通类也是不同的

上面说到循环执行 一个用例方法,什么时候会这样呢?就是比如你写了个失败重跑的装饰器。然后用n来计数。这个n就是类变量,初始值是0

你这个用例每次执行一次,就把类变量自加一。然后进行计数重跑次数。这个时候,类变量是真的会自加。但是这个用例超过最大重跑次数后,无论失败成功。类变量都会回归成0.其他用例再重跑的时候,依然是从0开始计数。

具体如何进行失败重跑。且带setup/teardown 请看我的另一篇文章《unittest 用例报错失败重跑 带setup/teardown》

0 人点赞