それ以外のテストケースの作成中にPython setUp
とtearDown
メソッドの使用法を説明できる人はいますか?setUp
テストメソッドを呼び出す直前に呼び出され、呼び出された直後に呼び出さtearDown
れますか?
回答:
一般に、すべての必須ステップをsetUpに追加し、すべてのクリーンアップステップをtearDownに追加します。
setUp()メソッドが定義されると、テストランナーは各テストの前にそのメソッドを実行します。同様に、tearDown()メソッドが定義されている場合、テストランナーは各テストの後にそのメソッドを呼び出します。
たとえば、アイテムの存在または特定の状態を必要とするテストがあるので、これらのアクション(オブジェクトインスタンスの作成、dbの初期化、ルールの準備など)をsetUpに入れます。
また、各テストは開始された場所で停止する必要があることを知っているため、アプリの状態を初期状態に戻す必要があります。たとえば、ファイルを閉じる、接続、新しく作成されたアイテムの削除、トランザクションコールバックの呼び出しなど-これらすべてステップはtearDownに含まれます。
つまり、テスト自体に結果を取得するためにテストオブジェクトで実行するアクションのみを含める必要があるという考え方ですが、setUpとtearDownは、テストコードをクリーンで柔軟性のあるものにするためのメソッドです。
一連のテストに対してsetUpとtearDownを作成し、それらを親クラスで定義できます。そのため、このようなテストをサポートし、一般的な準備とクリーンアップを更新するのは簡単です。
これらを使用して、テストスイート内のすべてのテストに共通するコードを除外できます。
テストに多数の繰り返しコードがある場合は、このコードを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())
10個のテストを含むスイートがあるとします。テストのうち8つは、同じセットアップ/ティアダウンコードを共有します。他の2つはしません。
セットアップとティアダウンは、これらの8つのテストをリファクタリングする良い方法を提供します。次に、他の2つのテストをどのように実行しますか?それらを別のテストケース/スイートに移動します。したがって、セットアップとティアダウンを使用すると、テストをケース/スイートに分割する自然な方法を提供するのにも役立ちます