にコンテキストマネージャを使用する方法:In python, is there a good idiom for using context managers in setup/teardownpy.test - funcarg /フィクスチャ密接に関連
私は時間/タイムゾーンを修正するためにテストで使用されたコンテキストマネージャを持っています。私はそれを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__
メソッドを正しく呼び出す手段がないことが問題です。
His answerはメタクラスアプローチを使用します。しかし、これはpytestにはあまり役に立ちません。多くの場合、テストはクラスではなく関数でしかありません。では、これを解決するにはどうすればいいのでしょうか? runtest hooksを含む何か?
私の心配は、 '__exit__'は呼び出されないかもしれないが、[正しい値](http://docs.python.org/2/reference/datamodel .html#context-managers)。 '__exit__'は、通常、' with'ブロック(またはこの場合はテスト本体です)で発生した例外に関する値で呼び出されます。 – pfctdayelise