这两种方法之间是否存在运行时逻辑差异?或任何行为差异?
如果没有,那么我应该忘记__init__
并仅使用setUpClass
在这里思考有关命名空间而不是语言OOP范例的单元测试类吗?
答案 0 :(得分:12)
两者完全不同。
setUpClass
是一种类方法,所以它只允许你设置 class 属性。
他们也在不同时间被召唤。测试运行器为每个测试创建新实例。如果test类包含5个测试方法,则会创建5个实例,并且会调用__init__
5次。
setUpClass
通常只被调用一次。 (如果您混合测试排序并且来自不同类的测试方法混合在一起,setUpClass
可以被多次调用,使用tearDownClass
来正确清理并且这不会是一个问题。)
此外,测试运行器通常在测试运行开始时创建所有测试实例;这通常是便宜的,因为测试实例不会保持(多)状态,因此不会占用太多内存。
根据经验,你 根本不应该使用__init__
。使用setUpClass
创建所有测试之间共享的状态,并使用setUp
创建每个测试状态。在运行测试之前调用setUp
,因此您可以避免在测试需要之前建立大量内存密集型状态,而不是之前。