web-dev-qa-db-ja.com

Djangoでのテスト:TestCaseクラスのsetUpClass、setUpTestData、setUpの違いは何ですか?

setUpClassクラスのsetUpTestDatasetUpTestCaseの違いは何ですか?

具体的には、それぞれのユースケースは何ですか?

これまでに理解したこと:

setUpClass

  • このメソッドは、テストクラスのすべてのテストの前に1回実行されます

setUpTestData

  • DBがトランザクションをサポートしている場合、このメソッドは1回実行されます。それ以外の場合は、各テストの前に実行されます。

セットアップ

  • このメソッドは、テストクラスの各テストの前に実行されます。

上記の理解から、setUpTestDataはsetUpClassとsetUpの間の領域にあるようです。 setUpClassまたはsetUpのいずれか、あるいは両方の組み合わせによって同じ効果を達成できるのに、なぜsetuUpTestDataのクラスレベルのメソッドが必要なのですか?

19
Raiyan

編集:Alasdairのコメント後の更新/修正

setUpClass

  • setUpClassは、クラス全体の初期化/構成(接続の作成、Webドライバーのロードなど)を実行するために使用されます。たとえば、setUpClassを使用してデータベース接続/セッションを開く場合、tearDownClassを使用してそれらを閉じることができます。
  • setUpClassは、テストを実行する前にTestCaseに対して1回呼び出されます。同様に、すべてのテストが実行された後でtearDownClassが呼び出されます。

ドキュメントからのメモ:

SimpleTestCaseとそのサブクラス(TestCaseなど)は、クラス全体の初期化(設定のオーバーライドなど)を実行するためにsetUpClass()とtearDownClass()に依存しています。これらのメソッドをオーバーライドする必要がある場合は、スーパー実装を呼び出すことを忘れないでください。

setUpTestData

  • setUpTestDataは、TestCaseごとに初期テストデータを作成するために使用されます。このメソッドはTestCase.setUpClass()( src )によって呼び出されます
  • documentation で説明されているように、setUpTestDataはTestCaseに対して一度だけ呼び出されます。データベースがトランザクションをサポートしていない場合、setUpTestDataは各テストの実行前に呼び出されます(@Alasdairに訂正してくれてありがとう)

セットアップ

  • setUpは各テスト実行の前に呼び出され、各テスト実行のテストデータセットを準備するために使用する必要があります。

setUpTestDataを使用すると、テストのパフォーマンスが向上します。テストでのこのデータの変更は、異なるテスト実行間で持続することに注意してください。リロードが必要な場合は、setUpメソッドから再ロードできます。テストの実行に使用されるデータベースがトランザクションをサポートしない場合、パフォーマンスの向上は無効になります(setUpTestDataは各テストの実行前に呼び出されるため)

19
Milan