Pytest: исправление глобальной переменнойPython

Программы на Python
Ответить
Anonymous
 Pytest: исправление глобальной переменной

Сообщение Anonymous »

Как исправить переменную с помощью макета или pytest-mock. Предположим, что переменная определена в другом скрипте Python и используется многими другими скриптами. Я хотел бы имитировать это в pytest_cmdline_main, чтобы все сценарии, использующие эту переменную, были соответствующим образом имитированы.
Быстрый пример будет
в env.py

Код: Выделить всё

VAR = "something"
в conftest.py

Код: Выделить всё

import os
import sys
from unittest.mock import patch

TEST_DIR = os.path.dirname(os.path.realpath(__file__))

class MockThings():
def __init__(self):
self.setup()

def setup(self):
mock_var = patch('env.VAR').start()
mock_var.return_value = "updated"

def pytest_cmdline_main(config):
sys.path.append(TEST_DIR)
MockThings()
в test_something.py

Код: Выделить всё

from env import VAR

def test_sample():
print(VAR)
# do something else here
assert False

def test_sample2():
print(VAR)
# do something else here
assert False
Когда вы запускаете pytest -v
Тест завершится неудачно, как и ожидалось, но в стандартном выводе будет указано что-то вроде:
Потому что он рассматривает макет как функцию, если я заменю print(VAR) на print(VAR()), то распечатка будет правильной ().
Как мне имитировать эту переменную, а не рассматривать ее как функцию? Я знаю, что вы можете просто установить VAR="updated" в самой тестовой функции, но я просто хочу, чтобы это было высмеяно, и я думаю, что это не лучшее представление моего фактического варианта использования, но я просто хотел иметь быстрый и простой тестовый код, который можно было бы легко запустить и понять.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»