ホームページ > バックエンド開発 > Python チュートリアル > Python でパラメータ化を使用した動的単体テストを実装するにはどうすればよいですか?

Python でパラメータ化を使用した動的単体テストを実装するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-23 20:52:13
オリジナル
879 人が閲覧しました

How Can I Implement Dynamic Unit Testing with Parameterization in Python?

パラメータ化を使用した Python での動的単体テスト

はじめに

パラメータ化はユニット内のテクニックですさまざまな入力データのセットを使用したテストの作成を自動化するテスト。これにより、開発者はさまざまなシナリオでコードを徹底的にテストし、その堅牢性と信頼性を確保できます。

pytest のデコレータを使用したパラメータ化

パラメータ化の一般的なオプションの 1 つは、pytest のデコレータを使用することです。 @parametrize デコレータをテスト クラスに追加し、その後に次のような値のリストを追加するだけです:

from pytest import mark

class TestSequence(unittest.TestCase):

    @mark.parametrize(
        ["name", "a", "b"],
        [
            ["foo", "a", "a"],
            ["bar", "a", "b"],
            ["lee", "b", "b"],
        ]
    )
    def test_sequence(self, name, a, b):
        self.assertEqual(a, b)
ログイン後にコピー

このデコレータは、リスト内の値のセットごとに個別のテストを自動的に生成します。

パラメータ化されたライブラリを使用したパラメータ化

もう 1 つのオプションは、パラメータ化されたライブラリを使用することです。このライブラリを使用して同じテストがどのように行われるかを次に示します。

from parameterized import parameterized

class TestSequence(unittest.TestCase):

    @parameterized.expand([
        ["foo", "a", "a"],
        ["bar", "a", "b"],
        ["lee", "b", "b"],
    ])
    def test_sequence(self, name, a, b):
        self.assertEqual(a, b)
ログイン後にコピー

どちらの場合も、結果は同じです。提供されたデータに基づいて複数のテストが生成されるため、コードを徹底的にテストできます。

>

パラメータ化の独自のアプローチ

上記の方法は現代的で広く使用されていますが、古いアプローチもありましたテストメソッドを動的に生成します。ただし、このアプローチは現在では一般的に使用されておらず、歴史的な理由のみで言及されています:

import unittest

l = [["foo", "a", "a",], ["bar", "a", "b"], ["lee", "b", "b"]]

class TestSequense(unittest.TestCase):
    pass

def test_generator(a, b):
    def test(self):
        self.assertEqual(a,b)
    return test

if __name__ == '__main__':
    for t in l:
        test_name = 'test_%s' % t[0]
        test = test_generator(t[1], t[2])
        setattr(TestSequense, test_name, test)
    unittest.main()
ログイン後にコピー

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

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