什么时候我应该使用setUpClass和__init__?

时间:2013-08-05 10:55:58

标签: python oop unit-testing

这两种方法之间是否存在运行时逻辑差异?或任何行为差异?
如果没有,那么我应该忘记__init__并仅使用setUpClass在这里思考有关命名空间而不是语言OOP范例的单元测试类吗?

1 个答案:

答案 0 :(得分:12)

两者完全不同。

setUpClass是一种类方法,所以它只允许你设置 class 属性。

他们也在不同时间被召唤。测试运行器为每个测试创建新实例。如果test类包含5个测试方法,则会创建5个实例,并且会调用__init__ 5次。

setUpClass通常只被调用一次。 (如果您混合测试排序并且来自不同类的测试方法混合在一起,setUpClass可以被多次调用,使用tearDownClass来正确清理并且这不会是一个问题。)

此外,测试运行器通常在测试运行开始时创建所有测试实例;这通常是便宜的,因为测试实例不会保持(多)状态,因此不会占用太多内存。

根据经验,你 根本不应该使用__init__。使用setUpClass创建所有测试之间共享的状态,并使用setUp创建每个测试状态。在运行测试之前调用setUp,因此您可以避免在测试需要之前建立大量内存密集型状态,而不是之前。