Тясно свързано: В Python има ли добър идиом за използване на контекстни мениджъри в setup/teardown
Имам контекстен мениджър, който се използва в тестове за коригиране на часа/часовата зона. Искам да го имам в pytest funcarg (или fixture, ние използваме 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)
... но е малко неприятно. В свързаното Q jsbueno посочва: Проблемът е, че вашият код няма разпоредба за извикване на __exit__
метода на обекта правилно, ако възникне изключение.
Отговорът му използва подход на метаклас. Но това не е толкова полезно за pytest, където често тестовете са просто функции, а не класове. И така, какъв би бил най-добрият начин за решаване на това? Нещо, включващо кукички за тестване на изпълнение?