密切相关: 在 python 中,是否有在 setup/teardown 中使用上下文管理器的好习惯
我有一个上下文管理器,用于在测试中修复时间/时区。我想将它放在 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)
...但它有点恶心。在相关的 Q jsbueno中指出:问题是您的代码没有规定在__exit__
发生异常时正确调用对象的方法。
他的回答使用了元类方法。但这对于 pytest 来说并不是那么有用,因为 pytest 通常测试只是函数,而不是类。那么解决这个问题的 pytest-y 方法是什么?涉及运行测试钩子的东西?