13

这两种方法之间是否存在运行时逻辑差异?或者任何行为差异?
如果不是,那么我应该忘记__init__并在这里只setUpClass考虑单元测试类,比如命名空间而不是语言 OOP 范式吗?

4

1 回答 1

17

两者完全不同。

setUpClass是一个类方法,所以它只会让你设置属性。

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

setUpClass通常只调用一次。(如果你打乱了测试顺序并且来自不同类的测试方法混合在一起,setUpClass可以多次调用,用于tearDownClass正确清理,这不会有问题)。

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

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

于 2013-08-05T11:18:00.473 回答