パラメータ化を使用した 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 サイトの他の関連記事を参照してください。