115

テストケースを作成する際のPythonsetUpとメソッドの使用法を説明できる人はいますか?それ以外は、テストメソッドを呼び出す直前に呼び出され、呼び出された直後に呼び出されますか?tearDownsetUptearDown

4

3 に答える 3

100

一般に、すべての前提条件ステップをsetUpに追加し、すべてのクリーンアップステップをtearDownに追加します。

こちらの例で詳細を読むことができます。

setUp()メソッドが定義されている場合、テストランナーは各テストの前にそのメソッドを実行します。同様に、tearDown()メソッドが定義されている場合、テストランナーは各テストの後にそのメソッドを呼び出します。

たとえば、アイテムが存在すること、または特定の状態を必要とするテストがある場合、これらのアクション(オブジェクトインスタンスの作成、dbの初期化、ルールの準備など)をセットアップに配置します。

また、ご存知のとおり、各テストは開始された場所で停止する必要があります。つまり、アプリの状態を初期状態に復元する必要があります。たとえば、ファイルを閉じる、接続、新しく作成されたアイテムの削除、トランザクションコールバックの呼び出しなどです。ステップはtearDownに含まれます。

したがって、テスト自体には、結果を得るためにテストオブジェクトに対して実行されるアクションのみを含める必要がありますが、setUpとtearDownは、テストコードをクリーンで柔軟な状態に保つのに役立つメソッドです。

一連のテスト用にsetUpとtearDownを作成し、それらを親クラスで定義できます。そのため、このようなテストをサポートし、一般的な準備とクリーンアップを更新するのは簡単です。

簡単な例をお探しの場合は、次の例のリンクを使用してください

于 2011-07-28T06:08:43.177 に答える
67

これらを使用して、テストスイートのすべてのテストに共通するコードを除外できます。

テストに繰り返しコードがたくさんある場合は、このコードをsetUp / tearDownに移動することで、コードを短くすることができます。

これは、テストデータの作成(偽物/モックの設定など)や、偽物を使用した関数のスタブ化に使用できます。

統合テストを実行している場合は、setUpで環境の前提条件を確認し、何かが正しく設定されていない場合はテストをスキップできます。

例えば:

class TurretTest(unittest.TestCase):

    def setUp(self):
        self.turret_factory = TurretFactory()
        self.turret = self.turret_factory.CreateTurret()

    def test_turret_is_on_by_default(self):
        self.assertEquals(True, self.turret.is_on())

    def test_turret_turns_can_be_turned_off(self):
        self.turret.turn_off()
        self.assertEquals(False, self.turret.is_on())
于 2011-07-28T06:02:05.787 に答える
8

10個のテストを含むスイートがあるとします。8つのテストは、同じセットアップ/ティアダウンコードを共有します。他の2つはしません。

セットアップとティアダウンは、これらの8つのテストをリファクタリングするための優れた方法を提供します。では、他の2つのテストをどうしますか?それらを別のテストケース/スイートに移動します。したがって、セットアップとティアダウンを使用すると、テストをケース/スイートに分割する自然な方法を提供するのにも役立ちます

于 2011-07-28T06:08:00.793 に答える