Тесно связаны: Есть ли в python хорошая идиома для использования контекстных менеджеров в настройке/разборке
У меня есть контекстный менеджер, который используется в тестах для исправления времени/часового пояса. Я хочу, чтобы это было в pytest funcarg (или приспособлении, мы используем pytest
2.2.3, но я могу перевести в обратном порядке). Я мог бы просто сделать это:
def pytest_funcarg__fixedTimezone(request):
# fix timezone to match Qld, no DST to worry about and matches all
# Eastern states in winter.
fixedTime = offsetTime.DisplacedRealTime(tz=' Australia/Brisbane')
def setup():
fixedTime.__enter__()
return fixedTime
def teardown(fixedTime):
# this seems rather odd?
fixedTime.__exit__(None, None, None)
... но это немного неприглядно. В соответствующем вопросе jsbueno указывает: Проблема в том, что в вашем коде нет возможности вызывать метод __exit__
объекта. правильно, если возникает исключение.
Его ответ использует подход метакласса. Но это не так полезно для pytest, где тесты часто представляют собой просто функции, а не классы. Итак, каким будет pytest-y способ решить эту проблему? Что-то, связанное с перехватчиками запуска?