Где/как определяются параметры pytest для отдельных тестов?Python

Программы на Python
Ответить
Anonymous
 Где/как определяются параметры pytest для отдельных тестов?

Сообщение Anonymous »

Мне очень не нравится автоматическое определение аргументов в pytest для отдельных тестов. Например, у меня есть тест, в котором я имитирую внешний вызов API:

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

def test_valid_type(monkeypatch):
mapping = {
10: True,
89: True,
120: False,
121: False,
}
monkeypatch.setattr(eligibility, "fetch_valid_types", lambda key: mapping.get(key))
assert eligibility.is_invalid(10) is False
assert eligibility.is_invalid(89) is False
assert eligibility.is_invalid(120) is True
assert eligibility.is_invalid(121) is True
Тест работает нормально, но я совершенно озадачен тем, как и где определен обезьяний патч.
Я пытаюсь переместить этот обезьяний патч в метод set_up, чтобы сделать насмешку многоразовой. У меня есть этот класс:

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

class TestHelper():
def mock_valid(monkeypatch):
mapping = {
10: {"accessibleDeliveryLocationTypes": ["a"]},
89: {"accessibleDeliveryLocationTypes": ["b"]},
120: {"accessibleDeliveryLocationTypes": []},
121: {"accessibleDeliveryLocationTypes": []},
}
monkeypatch.setattr(routes.eligibility, "nypl_core_patron_types", lambda key: mapping.get(key))

@classmethod
def set_up(cls, monkeypatch):
cls.mock_valid(monkeypatch)
GlobalLogger.initialize_logger(__name__)
Мне кажется странным, что мне пришлось бы передавать Monkeypatch как фактический аргумент в этом методе set_up, когда запуск вышеуказанного теста может автоматически заполнить значение. Я также попытался назначить значение по умолчанию в методеock_valid с такой сигнатурой функции: defock_nypl_core(cls,monkeypatch=monkeypatch): . В результате имя "monkeypatch" не определено. Я думаю, что если Monkeypatch может работать как аргумент без локального определения, разве я не должен иметь возможность предоставить его в качестве значения по умолчанию для этого параметра?
Я знаю, что это невоспроизводимый пример. Меня меньше интересует эта работа, а больше пытаюсь узнать больше о пространствах имен и автоматических определениях pytest.
Может ли кто-нибудь объяснить процесс, который pytest проходит во время выполнения для заполнения параметров тестовой функции? Это похоже на объединение моего понимания параметров (имен переменных, присвоенных значениям, которые, как ожидается, будут переданы в функцию) и аргументов (фактические заполненные значения, передаваемые при вызове этой функции). Есть ли где-нибудь документированный список этих встроенных приборов, которые не нужно импортировать, и с предопределенными параметрами? Наконец, я полагаю, что в какой-то момент их действительно нужно будет внедрить в функцию. Где это происходит? Являются ли они только в глобальном масштабе? или pytest действительно передает их в какой-то момент?

Подробнее здесь: https://stackoverflow.com/questions/798 ... ts-defined
Ответить

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

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

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

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

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