2

py.testは初めてです。これまでのところ、私は自分が見ているものが好きで、それをCIプロセスに統合したいと思っています。

現在、テストには別の種類のパラメーター化スキームを使用しています。これについて簡単に説明します。

  • テストごとにパラメータ化する代わりに、クラスごとにパラメータ化します
  • たとえばparams、タプルの集合であり、それぞれが異なるパラメータのセットを表します。
  • そのようなtuplaごとにTestCaseWithParametersunittest.TestCaseクラスであるいくつかの異なるインスタンスを作成します。このようなもの:
    for test_parameters in params:
        parameterized_test_suite.addTest(ParametrizedTestCase.parametrize(TestCaseWithParameters,param=test_parameters))
  • これらの各クラスには、これらのself.params異なるパラメータを使用してすべてのテスト関数が注入され、実行されます。
  • これは、数百のタプルがparamsあり、TestSomethingWithParameters数十のテストがある場合、合計で多くのテストがあることを意味します。

私の質問:これをpy.testに変換するにはどうすればよいですか?

フックについてのこの記事を読みましpytest_generate_testsたが、テスト関数ごとに依存関係が注入されているようで、テストケースごとに必要です...

最も簡単な方法は、py.testにparameterized_tes_suite、私がすでに作成した特定のものを実行するように指示することですが、そうする方法が見つかりませんでした...

別の方法は、TestCaseクラスレベルで同様の依存性注入を行うことですが、私もそれを行う方法を見つけていません。

4

1 に答える 1

2

@pytest.mark.parametrizeマーカーを使用して、クラス全体を簡単にパラメータ化できます。

import pytest

@pytest.mark.parametrize('n', [0, 1])
class TestFoo:

    def test_42(self, n):
        assert n == 42

    def test_7(self, n):
        assert n == 7

複数の引数を渡す方法などの詳細については、パラメーター化マーカーのドキュメントを参照してください。また、これに関する詳細については、クラスとモジュールにマーカーを適用する方法もご覧ください。

于 2013-03-20T13:47:14.477 に答える