Как использовать setup_class, чтобы определить переменную для доступа во всех методах класса - PullRequest
0 голосов
/ 10 октября 2019

Мне нужно определить переменную в методе фикстуры setup_class для pytest, например

class testClassForPytest:
  @classmethod
  def setup_class(cls):
    m = aClassInstance(classInput)

  def test_case_1(self):
    #use of the instance m with a method of its class

Я пробовал описанный выше подход, но не смог использовать экземпляр m.

Ответы [ 2 ]

0 голосов
/ 11 октября 2019

Полагаю, вы имели в виду, что в setup_class вы намеревались сделать cls.m = aClassInstance(classInput), а не просто m = ...

для этого, вы могли бы изменить свой код, используя приспособление области видимости класса pytest для достижениятот же результат:

@pytest.fixture(scope='class')
def setup_class(request):
  m = aClassInstance(classInput)
  request.cls.m = m # makes pytest to add created instance to class to which fixture is applied to

@pytest.mark.usefixtures("setup_class")
class testClassForPytest:
  def test_case_1(self):
    #use of the instance m as self.m
0 голосов
/ 10 октября 2019

Кажется, что настройка набора тестов (класса) для pytest унаследована от стандартного юнит-теста библиотеки python. С этой библиотекой метод называется setUpClass и, вероятно, должен вызывать тот же метод в своем родительском классе. Однако, поскольку вы используете pytest, который, похоже, не соответствует идее наборов тестов, я не совсем уверен, что это проблема. Тем не менее, это может быть одним из источников проблем, если метод должен вызываться как-то иначе.

В вашем коде метод setup_class, вы устанавливаете переменную m в значение, но эта переменнаяограничено локальной областью применения метода. Только если вы ранее определили переменную в области видимости класса, или если вы явно указали на переменную в области видимости класса, вы сможете позже получить доступ к значению снова.

Например, вы можете просто переместить объявление вобласть действия класса:

class testClassForPytest:
  m = aClassInstance(classInput) 

  def test_case_1(self):
    #use of the instance m with a method of its class

В этом случае вы вообще не используете метод установки. Если вам нужны конкретные входные данные, которые недоступны при объявлении класса, вы также можете установить переменную напрямую:

  @classmethod
  def setup_class(cls):
    cls.m = aClassInstance(classInput)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...