Python でのパラメーター化された単体テスト: 動的テスト生成のガイド
ソフトウェア開発において、テストは信頼性と信頼性を確保する上で重要な役割を果たします。私たちのコードの正確さ。特に単体テストには、特定の機能またはモジュールに対する個別のテストの作成が含まれます。ただし、大規模なデータセットや複雑なテスト シナリオを扱う場合、各パラメーターのテストを手動で作成するのは面倒になります。
パラメーター化されたテスト: 動的テスト生成のソリューション
パラメーター化されたテスト (パラメーター化された単体テストとも呼ばれます) は、入力パラメーターに基づいてテスト生成のプロセスを自動化することで、この課題に対処します。これにより、実行時にテスト パラメーターを動的に置き換えて、複数のデータ セットにわたって単一のテストを実行できます。
パラメーター化のためのツールとテクニック
Python はさまざまな範囲を提供しますパラメータ化のためのツールとライブラリの。これらには、
1 が含まれます。 pytest の Decorator:
pytest は、パラメータ化を簡素化する便利なデコレータ @pytest.mark.parametrize を提供します。これにより、テスト パラメーターを含むタプルのリストを渡すことができ、デコレーターは値のセットごとにテストを展開します。
例:
import pytest @pytest.mark.parametrize("name, a, b", [ ("foo", "a", "a"), ("bar", "a", "b"), ("lee", "b", "b"), ]) def test_sequence(name, a, b): assert a == b
2をアサートします。パラメータ化されたライブラリ:
パラメータ化されたライブラリは、パラメータ化の代替アプローチを提供します。これにより、デコレーター @parameterized.expand を使用してテスト パラメーターをリストまたはジェネレーターとして指定できるようになります。
例:
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 開発ではあまり一般的ではありません。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3