这两种方法之间是否存在运行时逻辑差异?或者任何行为差异?
如果没有,那么我应该忘记 __init__
,只使用 setUpClass
,将unittest类视为命名空间,而不是语言的面向对象编程范例?
这两种方法之间是否存在运行时逻辑差异?或者任何行为差异?
如果没有,那么我应该忘记 __init__
,只使用 setUpClass
,将unittest类视为命名空间,而不是语言的面向对象编程范例?
两者有很大的不同。
setUpClass
是一个类方法,因此只能设置类属性。
它们也在不同的时间调用。测试运行程序为每个测试创建一个新实例。如果您的测试类包含5个测试方法,则会创建5个实例,并调用__init__
5次。
setUpClass
通常仅被调用一次。(如果打乱测试顺序并且来自不同类的测试方法交错,setUpClass
可能会被多次调用,使用tearDownClass
进行适当清理即可避免该问题)。
此外,测试运行程序通常在测试运行开始时创建所有测试实例;这通常很便宜,因为测试实例不持有(太多)状态,因此不会占用太多内存。
作为经验法则,您不应该使用__init__
。使用setUpClass
创建在所有测试之间共享的状态,并使用setUp
创建每个测试的状态。 setUp
在运行测试之前调用,因此可以避免在需要测试之前建立大量占用内存的状态。
setUpClass
被调用。 - DylanYoungunittest.main()
来控制测试何时开始。或者使用setUpModule()
和tearDownModule()
钩子。 - Martijn PieterssetUpModule
和tearDownModule
完美地完成了任务。不知道我怎么错过了这些。 - DylanYoung