Я создал декоратор, чтобы функции можно запускать только в определенных условиях:Как выполнить модульное тестирование декоратора, который использует переменную окружения?
def accepted_environments(*envs):
"""
The decorated function can be executed only in specified envs
"""
def my_decorator(func_to_be_decorated):
def wrapper():
if settings.ENV_NAME not in envs:
raise EnvironmentException
return func_to_be_decorated()
return wrapper
return my_decorator
# Usage example
@accepted_environments('local', 'prod')
def hello():
print("hello")
Это похоже на работу, но я хотел бы модульное тестирование его. Проблема в том, что мои тесты потенциально выполняются в каждой среде (локальная, промежуточная, prod). Плюс, я думаю, что это не безопасно, мои тесты могут изменять переменные среды.
Должен ли я «издеваться» над этим поведением? Как бы вы поступили? Благодаря!
Спасибо за идею. mock.patch.objet не существует (я использую Python 3.5). Я пытался с помощью 'с mock.patch (настройки, ENV_NAME =" env1 ")', но я получаю объект AttributeError: 'Settings' не имеет атрибута 'rsplit'' –
Вы импортируете сторонний модуль 'mock'? https://docs.python.org/3/library/unittest.mock.html#patch-object – chepner
Нет, это просто Pycharm..weird. В противном случае я получаю 'TypeError: _patch_object() отсутствующий 1 обязательный позиционный аргумент: 'attribute'' Я пытаюсь выяснить в докторе, какой макет нужен :) –