ホームページ >バックエンド開発 >Python チュートリアル >パラメーター化された単体テストで Python テストの生成を効率化するにはどうすればよいですか?
Python でのパラメーター化された単体テスト: 動的テスト生成のガイド
ソフトウェア開発において、テストは信頼性と信頼性を確保する上で重要な役割を果たします。私たちのコードの正確さ。特に単体テストには、特定の機能またはモジュールに対する個別のテストの作成が含まれます。ただし、大規模なデータセットや複雑なテスト シナリオを扱う場合、パラメーターごとにテストを手動で作成するのは面倒になります。
パラメーター化されたテスト: 動的テスト生成のソリューション
パラメーター化されたテスト (パラメーター化された単体テストとも呼ばれます) は、入力パラメーターに基づいてテスト生成のプロセスを自動化することで、この課題に対処します。これにより、実行時にテスト パラメータを動的に置き換えて、複数のデータ セットにわたって単一のテストを実行できます。
パラメータ化のためのツールとテクニック
Python はさまざまな範囲を提供しますパラメータ化のためのツールとライブラリの。これらには次のものが含まれます:
1. pytest のデコレーター:
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 テストの生成を効率化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。