приспособление pytest - получить значение и избежать ошибки "Fixture 'X' вызывается напрямую" - PullRequest
0 голосов
/ 26 февраля 2019

Я обновил pytest до 4.3.0, и теперь мне нужно переделать тестовый код, так как прямой вызов осветительных приборов устарел.

У меня проблема с приборами, используемыми в unittest.TestCase, как получить значение, возвращаемое из осветителя, а не ссылку на саму функцию?

Пример:

@pytest.fixture
def test_value():
    return 1

@pytest.mark.usefixtures("test_value")
class test_class(unittest.TestCase):
    def test_simple_in_class(self):
        print(test_value)    # prints the function reference and not the value
        print(test_value())  # fails with Fixtures are not meant to be called directly

def test_simple(test_value):
    print(test_value)  # prints 1

Как получить test_value в методе test_simple_in_class ()?

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Решение моего простого примера, если кому-то интересно.

def my_original_fixture():
    return 1

@pytest.fixture(name="my_original_fixture")
def my_original_fixture_indirect():
    return my_original_fixture()

@pytest.mark.usefixtures("my_original_fixture")
class test_class(unittest.TestCase):
    def test_simple_in_class(self):
        print(my_original_fixture())

def test_simple(my_original_fixture):
    print(my_original_fixture)
0 голосов
/ 26 февраля 2019

Уже было большое обсуждение этого .Вы можете прочитать это или обратиться к документации об устаревании .

В вашем надуманном примере кажется, что это ответ:

@pytest.fixture(name="test_value")
def test_simple_in_class(self):
    print(test_value())

Однако я предлагаю проверитьDocs.Другим примером может быть то, что вы хотите.Вы можете прочитать обсуждение, на которое я ссылался, по некоторым соображениям.Спор немного разгорелся.

...