密接に関連しています: 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)
…が、ちょっとイケる。関連する Qで jsbuenoは次のように指摘しています。問題は、例外が発生した場合にオブジェクトの__exit__
メソッドを適切に呼び出すための準備がコードにないことです。
彼の答えは、メタクラスのアプローチを使用しています。しかし、これは、多くの場合、テストがクラスではなく単なる関数である pytest にはあまり役立ちません。では、これを解決する pytest-y の方法は何でしょうか? runtest フックに関するものはありますか?