xunitスタイルのセットアップを実装する方法

このセクションでは、モジュール/クラス/関数ごとにフィクスチャ (テスト状態のセットアップとティアダウン) を実装するための古典的で人気のある方法について説明します。

注釈

これらのセットアップ/ティアダウンメソッドはシンプルで、unittestnose の背景を持つ人には馴染み深いものですが、pytest のより強力な fixture mechanism を使用することも検討してください。 これは依存性注入の概念を活用し、特に大規模なプロジェクトや機能テストにおいて、テスト状態を管理するためのよりモジュール化され、よりスケーラブルなアプローチを可能にします。 同じファイル内で両方のフィクスチャメカニズムを混在させることができますが、unittest.TestCase サブクラスのテストメソッドはフィクスチャ引数を受け取ることができません。

モジュールレベルのセットアップ/ティアダウン

単一のモジュールに複数のテスト関数とテストクラスがある場合、次のフィクスチャメソッドをオプションで実装できます。 これらは通常、すべての関数に対して一度だけ呼び出されます。

def setup_module(module):
    """setup any state specific to the execution of the given module."""


def teardown_module(module):
    """teardown any state that was previously setup with a setup_module
    method.
    """

pytest-3.0 以降、module パラメータはオプションです。

クラスレベルのセットアップ/ティアダウン

同様に、次のメソッドはクラスのすべてのテストメソッドが呼び出される前後にクラスレベルで呼び出されます。

@classmethod
def setup_class(cls):
    """setup any state specific to the execution of the given class (which
    usually contains tests).
    """


@classmethod
def teardown_class(cls):
    """teardown any state that was previously setup with a call to
    setup_class.
    """

メソッドおよび関数レベルのセットアップ/ティアダウン

同様に、次のメソッドは各メソッド呼び出しの前後に呼び出されます。

def setup_method(self, method):
    """setup any state tied to the execution of the given method in a
    class.  setup_method is invoked for every test method of a class.
    """


def teardown_method(self, method):
    """teardown any state that was previously setup with a setup_method
    call.
    """

pytest-3.0 以降、method パラメータはオプションです。

テスト関数をモジュールレベルで直接定義する場合は、次の関数を使用してフィクスチャを実装することもできます。

def setup_function(function):
    """setup any state tied to the execution of the given function.
    Invoked for every test function in the module.
    """


def teardown_function(function):
    """teardown any state that was previously setup with a setup_function
    call.
    """

pytest-3.0 以降、function パラメータはオプションです。

備考:

  • セットアップ/ティアダウンのペアは、テストプロセスごとに複数回呼び出される可能性があります。

  • 対応するセットアップ関数が存在し、失敗またはスキップされた場合、ティアダウン関数は呼び出されません。

  • pytest-4.2 以前は、xunitスタイルの関数はフィクスチャのスコープルールに従わなかったため、例えば、セッションスコープの自動使用フィクスチャの前に setup_method が呼び出される可能性がありました。

    現在、xunitスタイルの関数はフィクスチャメカニズムと統合され、呼び出しに関与するフィクスチャの適切なスコープルールに従います。