@unittest.skipIf(expression)
で問題が発生しました。まあ、問題は、テストを開始する前に宣言され、値を割り当てられたデコレータ内の変数を使用し、テスト中にこの変数の値が変更された場合、デコレータに古い値が含まれるということです。たとえば:Settings.flag
の[@ unittest.skipIf decorator]の条件が古くなっています。
class Settings(object):
flag=False
class TestCase(object):
# during the test variable is changed (in this module or another)
Settings.flag=True
@unittest.skipIf(Settings.flag==True)
def test_something(self):
...
値(これは関係ありません)他のモジュールまたはこのモジュールに変更することができます。どちらの場合も、test_something
のコール中の条件Setting.flag==True
は、すでに「真」の値に変更されていますが、「偽」の値を取ります。非常に奇妙なことですが、私はこのメカニズムがどのように機能するのか分かりません。このデコレータで使用される値は、テスト中に変更できないようです。おそらく、テスト中に変化する可能性のある特定の条件の時にテストをスキップするための興味深い方法があります。誰もこの問題にアプローチする方法を知っていますか?
;-)私はこのストレートを取得してみましょう...それを私の指を置くことができない...見えます。 'flag'がtrueならテストをスキップします。それは本当です、あなたはテストをスキップします。後で、あなたは '旗'を変えます - あなたは時を経て戻って、魔法のように "切り刻まない"ようにしたいですか? – katrielalex
いいえ。デフォルト値はFALSEです。テスト値がTRUEで変化している間は 'skipIf'はこの値をFALSEとして読み込みます。値は 'test_something'呼び出しの前に変更されています。 –