Python でパラメータ化された単体テストを効率的に生成するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-23 17:23:13
オリジナル
517 人が閲覧しました

How to Efficiently Generate Parameterized Unit Tests in Python?

Python で動的 (パラメーター化された) 単体テストを生成する方法

概要

テスト時複雑な関数の場合、わずかに異なる入力を使用して複数のテスト ケースを作成する必要があることがよくあります。各テスト ケースを手動で作成すると、面倒になり、エラーが発生しやすくなります。ここでパラメータ化されたテストが役に立ちます。

パラメータ化

パラメータ化を使用すると、単一のテスト ケースを定義し、それぞれに対してテストを実行するためのパラメータ値のリストを提供できます。パラメータのセット。このアプローチにより、テスト ケースの生成が自動化され、考えられるすべての入力が確実にテストされます。

pytest の Parametrizer を使用する

pytest は、テスト関数のパラメータ化。これは引数としてタプルまたは辞書のリストを受け取り、それぞれがパラメータ値のセットを表します。

import pytest

test_data = [
    ("foo", "a", "a"),
    ("bar", "a", "b"),
    ("lee", "b", "b"),
]

@pytest.mark.parametrize("name, a, b", test_data)
def test_sequence(name, a, b):
    assert a == b
ログイン後にコピー

このコードは、test_data のパラメータのセットごとに 1 つずつ、合計 3 つのテストを生成します。テスト名はパラメーター値に基づいて自動的に生成されます。

パラメーター化されたパッケージの使用

パラメーター化されたパッケージは、パラメーター化のためのより柔軟なインターフェイスを提供します。これにより、一連のテスト ケースを返すジェネレーター関数を定義できます。

from parameterized import parameterized

test_data = [
    ("foo", "a", "a"),
    ("bar", "a", "b"),
    ("lee", "b", "b"),
]

@parameterized.expand(test_data)
def test_sequence(name, a, b):
    assert a == b
ログイン後にコピー

このコードでも、test_data のパラメーター セットごとに 1 つずつ、合計 3 つのテストが生成されます。テスト名は自動的に生成されます。

利点

パラメータ化されたテストを使用すると、次のような利点があります。

  • コードの重複が減少します。 マイナーなテストケースのみを含む複数のテストケースを生成します
  • 可読性の向上: テスト コードを簡潔かつ理解しやすく保ちます。
  • テスト カバレッジの強化: 考えられるすべてのシナリオがテストされるようにします。
  • 保守性の向上:パラメータ値が変更されたときにテストを更新するのが簡単になります。

以上がPython でパラメータ化された単体テストを効率的に生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート