13

これら 2 つの方法の間にランタイム ロジックの違いはありますか? または動作の違いはありますか?そうでない場合は、言語 OOP パラダイムの代わりに、名前空間などの単体テスト クラスについてここで考えることだけ
を忘れて使用する必要がありますか?__init__setUpClass

4

1 に答える 1

17

2つはかなり異なります。

setUpClass1つはクラスメソッドであるため、クラス属性のみを設定できます。

また、さまざまなタイミングで呼び出されます。テスト ランナーは、テストごとに新しいインスタンスを作成します。テスト クラスに 5 つのテスト メソッドが含まれている場合、5 つのインスタンスが作成され、5 回呼び出されます。__init__

setUpClass通常、一だけ呼び出されます。(テストの順序をシャッフルし、異なるクラスのテストメソッドが混在している場合、setUpClass複数回呼び出すことができ、tearDownClass適切にクリーンアップするために使用すれば問題ありません)。

また、テスト ランナーは通常、テスト実行の開始時にすべてのテスト インスタンスを作成します。テストインスタンスは(多くの)状態を保持しないため、多くのメモリを占有しないため、これは通常安価です。

経験則として、まったく使用__init__しないでください。setUpClassすべてのテスト間で共有される状態を作成するために使用し、テストごとsetUpの状態を作成するために使用します。setUpテストが実行される直前に呼び出されるため、テストに必要になるまで、大量のメモリ集約型の状態を構築することを避けることができます。

于 2013-08-05T11:18:00.473 に答える