2016-12-13 12 views
0

私のコードの一部でwaitingライブラリを使用して、条件が真になるのを待っています。ライブラリの一部として、waiting.waitは述語が真であるときにTrueを返します。それ以外の場合は、タイムアウト値などによって例外がスローされたり、永久に待機したりします。Pythonで待ちライブラリを模擬する方法はありますか?

テストでこれを修正して、ウェイトサイクルに入ることなく常にTrueを返します。ここに私の試みです:

私が見つけたのは、実際には、リターンを短絡する代わりにライブラリのコードを呼び出すことです。

実際にコードを呼び出さずに、このメソッドが強制的に値を返す(または副作用を起こす)ようにするにはどうすればよいですか?

答えて

1

waiting.waitはモックオブジェクトではないため、waiting.wait.return_value = Trueは機能しません。既存のwait関数にのみ任意の属性を追加しましたが、その関数はその属性を使用しません。

from unittest import mock 

with mock.patch('__main__.wait'): 
    wait.return_value = True 

waitingライブラリの内部を模擬する必要はありません、あなたのコードで発生するすべてが、そのいずれかの使用である:ちょうど直接それを嘲笑、wait機能をモックとし

wait()呼び出し可能関数のすぐ呼び出します。

wait()にパッチを適用する__main__モジュールを選択しました。unittest.mockのドキュメントのWhere to patchを参照してください。

実際の場所は異なる場合があり、どこでもimport waitingを使用した場合は、mock.patch('waiting.wait')を使用する必要があります。それ以外の場合は、一般的に使用したのと同じモジュールを使用します。from waiting import wait

+0

それは私の愚かでした。 :)完璧に動作します。乾杯! – erip

関連する問題