11

pytest のパラメーター化アノテーションを使用して、パラメーターをクラスに渡しています。テスト メソッドでパラメータを使用できますが、setup_class メソッドでパラメータを使用する方法がわかりません。

import pytest

params = ['A','B','C']

@pytest.mark.parametrize('n', params)
class TestFoo:

    def setup_class(cls):
        print ("setup class:TestFoo")
        # Do some setup based on param

    def test_something(self, n):
        assert n != 'D'

    def test_something_else(self, n):
        assert n != 'D'

次のように、テストメソッドのようなパラメーターとして「n」を追加してみました。

def setup_class(cls, n):
        print ("setup class:TestFoo")
       # Do some setup based on param

エラーが発生します:

self = <Class 'TestFoo'>

    def setup(self):
        setup_class = xunitsetup(self.obj, 'setup_class')
        if setup_class is not None:
            setup_class = getattr(setup_class, 'im_func', setup_class)
            setup_class = getattr(setup_class, '__func__', setup_class)
>           setup_class(self.obj)
E           TypeError: setup_class() takes exactly 2 arguments (1 given)

setup_class メソッドでパラメーターを使用する他の方法はありますか?

4

2 に答える 2

-4

属性を に割り当てることにより、属性をテスト クラスに渡す必要がありますcls。後で割り当てるすべての属性と関数は、クラスの属性/メソッドになります。

パラメータ化されたデコレータは、クラス メソッドで使用する必要があります (メソッドをテストしたいと思いませんか?)

そう:

import pytest

params = ['A','B','C']

class TestFoo:

    def setup_class(cls):
        cls.n = params

    @pytest.mark.parametrize('n', params)
    def test_something(self, n):
        assert n != 'D'

    @pytest.mark.parametrize('n', params)
    def test_something_else(self, n):
        assert n != 'D'

    def test_internal(self):
        assert self.n != params

テストはtest_internal. It illustrates thatparams were set toself.n and nowself.n equals toparams`で失敗します

于 2013-11-01T23:07:31.210 に答える