6

現在、テスト フレームワークに組み込まれている python を使用して構築されている一連の python 単体テストに取り組んでいます。与えられたデータセットに基づいて複数回実行されるパラメータ化されたテストを書きたいと思います。

すなわち。データ セットが [1,2,3,4] の場合、テスト関数はデータ セットの入力を使用して 4 回実行されます。

def test(data):
    if data > 0:
       #Pass the test

私の理解では、テスト関数にループを入れない限り、これは現在組み込みのフレームワークでは不可能です。1 つの入力が失敗してもテストを実行し続ける必要があるため、これは実行したくありません。

私は、nose または pyTest を使用して実行できることを見てきました。使用するのに最適なフレームワークはどれですか? これらのいずれよりも優れた、使用できる別のフレームワークはありますか?

前もって感謝します!

4

2 に答える 2

6

これは、最近py.testに追加されたfuncargsの最も一般的な用途の 1 つであることに注意してください。

あなたの場合、次のようになります:

def pytest_generate_tests(metafunc):
    if 'data' in metafunc.funcargnames:
        metafunc.parametrize('data', [1,2,3,4])

def test_data(data):
    assert data > 0

[編集] おそらく、次のように簡単に行うこともできることを追加する必要があります

@pytest.mark.parametrize('data', [1,2,3,4])
def test_data(data):
    assert data > 0

したがって、py.testはパラメーター化された単体テストの優れたフレームワークであると言えます...

于 2012-03-16T10:22:55.513 に答える
1

次の方法で、データ セットに基づいてテストを動的に作成できます。

import unittest

data_set = [1,2,3,4]

class TestFunctions(unittest.TestCase):
    pass  # all your non-dynamic tests here as normal

for i in data_set:
    test_name = "test_number_%s" % i # a valid unittest test name starting with "test_"
    def dynamic_test(self, i=i):
        self.assertTrue(i % 2)
    setattr(TestFunctions, test_name, dynamic_test)

if __name__ == '__main__':
    unittest.main()

質問Python unittest: プログラムで複数のテストを生成しますか? テストケースの複数のインスタンスをテストスイートに動的に作成することによって同じことを達成する別のアプローチを含め、これについてさらに議論しています。

于 2012-02-25T13:52:59.763 に答える