フィクスチャのティアダウン

Pythonによるテスト入門

Alexander Levin

Data Scientist

フィクスチャのティアダウンとは

  • フィクスチャのティアダウン: テスト環境のセットアップで確保・作成したリソースを「片付ける」処理。

「ピクニック」の例え:

  1. 友人を招き、食事を用意する
  2. 楽しむ
  3. 片付ける — これがティアダウン
Pythonによるテスト入門

なぜティアダウンを使うか

テストの最後に環境をクリーンアップすることが重要です。ティアダウンをしないと、次の問題を招きます:

  • メモリリーク
  • 実行速度低下・性能問題
  • テスト結果の不正確さ
  • パイプラインの失敗やエラー
Pythonによるテスト入門

使う場面

使う場面:

  • 大きなオブジェクト
  • 複数のテストがある
  • autouse を使用

不要な場面:

  • 単一テストのみの簡単なスクリプト
Pythonによるテスト入門

Python の遅延評価

  • yield は、ジェネレーターを作るための Python のキーワードです
# Example of generator function
def lazy_increment(n):
    for i in range(n):
        yield i
f = lazy_increment(5)
next(f) # 0
next(f) # 1
next(f) # 2
Pythonによるテスト入門

使い方

使い方:

  • returnyield に置き換える
  • ティアダウンは yield の後に書く
  • セットアップは yield の前のみに置く
Pythonによるテスト入門

ティアダウンの例

@pytest.fixture
def init_list():
    return []

@pytest.fixture(autouse=True)
def add_numbers_to_list(init_list):
    # Fixture Setup
    init_list.extend([i for i in range(10)])
    # Fixture output
    yield init_list
    # Teardown statement
    init_list.clear()

def test_9(init_list):
    assert 9 in init_list
Pythonによるテスト入門

まとめ

  • 定義: フィクスチャのティアダウンは、セットアップで確保したリソースをクリーンアップする処理です。
  • 使い方:
    • return の代わりに yield を使う
    • ティアダウンは yield の後に記述
  • 利点:
    • 障害を防止
    • 性能低下を防止
  • 使用タイミング: 複数テストがある場合は常に実施
Pythonによるテスト入門

Let's practice!

Pythonによるテスト入門

Preparing Video For Download...