web-dev-qa-db-ja.com

addCleanupとtearDown

最近、Ned Batchelderが 彼のPyCon 2016での講演 に注目:

テストの作成にunittestを使用している場合は、必ずaddCleanupを使用してください。tearDownよりもはるかに優れています。

今まで、私はaddCleanup()を使用したことがなく、テストの「セットアップ」と「ティアダウン」フェーズのメソッドのsetUp()/tearDown()ペアに慣れてきました。

addCleanup()ではなくtearDown()に切り替える必要があるのはなぜですか?


また最近ポッドキャスト Robert CollinsによるPythonユニットテスト でも議論されました。

33
alecxe

addCleanup doc string ごと:

クリーンアップ項目は、(tearDownとは異なり)setUpが失敗した場合でも呼び出されます

addCleanupを使用して複数の関数を登録できるため、クリーンアップするリソースごとに個別の関数を使用できます。これにより、コードをもう少し再利用可能/モジュール化することができます。

36
unutbu

addCleanup()メソッドは、それらの1つが失敗しても実行され、setUp()が失敗しても実行されます。 pytest の使用も検討する必要があります。

6
Raphaël Gomès

addCleanupのもう1つの良い点は、期待どおりに機能することです。

たとえば、それをsetUp関数で呼び出すと、すべてのテストメソッドが最終的にクリーンアップ関数を呼び出します。

テストメソッドで呼び出す場合、このメソッドのみがクリーンアップ関数を呼び出します。

2
laike9m