这两种方法之间是否存在运行时逻辑差异?或者任何行为差异?
如果不是,那么我应该忘记__init__
并在这里只setUpClass
考虑单元测试类,比如命名空间而不是语言 OOP 范式吗?
问问题
3498 次
1 回答
17
两者完全不同。
setUpClass
是一个类方法,所以它只会让你设置类属性。
它们也在不同的时间被调用。测试运行器为每个测试创建一个新实例。如果您的测试类包含 5 个测试方法,则会创建 5 个实例并被调用 5 次。__init__
setUpClass
通常只调用一次。(如果你打乱了测试顺序并且来自不同类的测试方法混合在一起,setUpClass
可以多次调用,用于tearDownClass
正确清理,这不会有问题)。
此外,测试运行程序通常在测试运行开始时创建所有测试实例;这通常很便宜,因为测试实例不保持(很多)状态,因此不会占用太多内存。
根据经验,您根本不应该使用__init__
。用于setUpClass
创建在所有测试之间共享的状态,并用于setUp
创建每个测试的状态。setUp
在运行测试之前调用,因此您可以避免在测试需要之前而不是之前建立大量内存密集型状态。
于 2013-08-05T11:18:00.473 回答