これら 2 つの方法の間にランタイム ロジックの違いはありますか? または動作の違いはありますか?そうでない場合は、言語 OOP パラダイムの代わりに、名前空間などの単体テスト クラスについてここで考えることだけ
を忘れて使用する必要がありますか?__init__
setUpClass
1 に答える
2つはかなり異なります。
setUpClass
1つはクラスメソッドであるため、クラス属性のみを設定できます。
また、さまざまなタイミングで呼び出されます。テスト ランナーは、テストごとに新しいインスタンスを作成します。テスト クラスに 5 つのテスト メソッドが含まれている場合、5 つのインスタンスが作成され、5 回呼び出されます。__init__
setUpClass
通常、一度だけ呼び出されます。(テストの順序をシャッフルし、異なるクラスのテストメソッドが混在している場合、setUpClass
複数回呼び出すことができ、tearDownClass
適切にクリーンアップするために使用すれば問題ありません)。
また、テスト ランナーは通常、テスト実行の開始時にすべてのテスト インスタンスを作成します。テストインスタンスは(多くの)状態を保持しないため、多くのメモリを占有しないため、これは通常安価です。
経験則として、まったく使用__init__
しないでください。setUpClass
すべてのテスト間で共有される状態を作成するために使用し、テストごとsetUp
の状態を作成するために使用します。setUp
テストが実行される直前に呼び出されるため、テストに必要になるまで、大量のメモリ集約型の状態を構築することを避けることができます。