Ich verwende pytests parametrize Annotationen, um params in eine Klasse zu übergeben. Ich kann die Parameter in den Testmethoden verwenden, aber ich kann nicht herausfinden, wie man die Parameter in der Methode setup_class verwendet.pytest: Wie man einen Klassenparameter an setup_class übergeben kann
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'
Ich habe versucht, Hinzufügen von 'n' als Parameter wie die Testmethoden, wie folgt aus:
def setup_class(cls, n):
print ("setup class:TestFoo")
# Do some setup based on param
Welche zu einem Fehler führt:
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)
Gibt es eine andere Art und Weise von Verwenden Sie den Parameter in der Methode setup_class?
aussehen Dies löst nicht wirklich was zu tun ist Ich versuche. In jedem Test ist "n" ein Element aus der Liste der Params. In Ihrem Beispiel ordnen Sie die gesamte Liste cls.n zu. Indem ich es auf Klassenebene mache, was ich will ist, für Element 'A', führe Setup spezifisch für Element 'A', dann führe Tests für Element 'A' aus. – user2945303
Und was ist das? Zum Beispiel verwendet es nicht einmal den Dekorator für die Setup-Methode in der Klasse, hat keine entsprechende Abreißfunktion und so weiter. – lpapp