2017-06-01 7 views
2

私はある条件をチェックするループでテストしています。python3 unittestに渡されたテストを設定する方法

条件が真であれば、このループを中断して渡すようにします。そうでなければ、ループ終了後に失敗とマークします。ここ

コード

while time.time() < timeout: 
    if condition: 
     self.assertTrue(True) 
self.fail() 

ですが、このソリューションが動作していない、ループがなぜこれほど、アサートと破壊されていませんか?

答えて

2

アサーションは、が失敗したときだけテストを中断します。。元のスニペットでは、ループ内のアサートが常に通過するので、テストは中断されません。この種の問題を解決する1つのアプローチは、ループの外ブール値を維持し、ループが終了したときにそれを主張することです:

test_passed = False 
while not test_passed and time.time() < timeout: 
    if condition: 
     test_passed = True 

self.assertTrue(test_passed)  
+0

ことができても、私は今のソリューションをやっているものですが、真= test_passed後、whileループでブレイクする必要がありますもありますので、私ことより簡潔な – Semant1ka

+0

@ Semant1kaあなたは 'break'ステートメントを使うことができますが、私はループの条件に条件を追加する方が好きです(上記の私の答えを見てください)。最終的には、それは味の問題です。 – Mureinik

+1

>アサーションは、失敗した場合にのみテストを中断します。 Whoa、ありがとう、それは私が本当に考えなかったケースです。 – Semant1ka

1

あなたは、複数のテストで主張することができ、したがって、アサートがループを中断されませんまたは関数を返します。

このあなたのために働く必要があります。

while not condition and time.time() < timeout: 
    time.sleep(0.1) 

self.assertTrue(condition) 
関連する問題