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》