をキャッチしていない要求します実行中、my_method
のtryブロックは決してキャッチしません。requests.exceptions.Timeout
Pythonはモックは、私が要求したパッケージとテストがタイムアウトに</p> <p>my_module.pyをunittestのを書いたタイムアウト例外
答えて
は、私はここを参照してください2つの問題があります。問題を直接修正するものと、実装をさらに単純化するMockingフレームワークのわずかな誤用です。
まず、直接あなたのアサーションをテストしようとしている方法に基づいて、あなたの問題に対処するために、あなたはここで実際に行うために探しているもの:あなたは助けるためにここにside_effect
を使用する必要があります
requests.get = get
あなたの例外を引き上げる。 documentationパー:あなたの例外を高めるために取得する必要
requests.get.side_effect = get
:念頭に置いて
side_effect allows you to perform side effects, including raising an exception when a mock is called
、あなたが本当にする必要があるすべてはこれです。しかし、チャンスはあなたがこのエラーかもしれない顔です:
TypeError: catching classes that do not inherit from BaseException is not allowed
これは最高することができ、実際にそれが起こっている理由についてthis偉大な答えを読むことによって説明しました。その答えで、その提案を実際にあなたがが必要なものだけを模倣するようにして、があなたの問題を完全に解決するのを助けます。だから、最後に、あなたのコードではなく、実際に嘲笑requests
モジュールの嘲笑get
で、次のようになります。
class MyUnitTest(unittest.TestCase):
@patch('my_module.requests.get')
def test_my_test(self, m_get):
def get(*args, **kwargs):
raise Timeout()
m_get.side_effect = get
try:
my_method()
except MyException:
return
あなたは今、実際にはさらにassertRaises
とunittestの中にあるものをより有効に利用することによって、これを簡素化することができますtry/exceptの代わりに。これは、メソッドが呼び出されたときに例外が発生したことを最終的に宣言します。さらに、にはが必要であり、タイムアウトを発生させる新しいメソッドを作成することはできません。実際には、模擬したgetには例外が発生するside_effect
が含まれているということを単純に述べることができます。
m_get.side_effect = Timeout()
しかし、あなたが実際に直接あなたのパッチデコレータにでこれを置くことができるので、今、あなたの最終的なコードは次のようになります:
class MyUnitTest(unittest.TestCase):
@patch('my_module.requests.get', side_effect=Timeout())
def test_my_test(self, m_get):
with self.assertRaises(MyException):
my_method()
をだから、単純にこれでその全体def get
を置き換えることができます私はこれが助けて欲しい!
patch('my_module.requests')
はmy_module.requests
を新しいモックオブジェクトに置き換えますが、テストメソッドでは、直接インポートした元のリクエストモジュールのrequests.get
メソッドを置き換えます。つまり、変更はモジュール内に反映されません。あなたの試験方法であなたはリクエストの上、それを交換する場合、それが動作するはず
ではなく、あなたのmy_module
内モック:
my_module.requests.get = get
- 1. NSURLSession - 要求がタイムアウトしました
- 2. コード= -1001 "要求がタイムアウトしました。"
- 3. SQL Server 2012のエラー - ロック要求タイムアウトこのエラーが来るとき、私は知っているファイルとバックアップデータベース</p></li> <li><p>を記録縮小するとき、私は「超過ロック要求タイムアウト」のエラーを取得
- 4. タイムアウトは、私が0.5秒後にコンソールで<strong><em>タイムアウト</em></strong>を印刷しようとしている。このコードでは
- 5. PGTとPGTIOUの保存CASが生成する
- 6. Pythonのurllib2の要求タイムアウト
- 7. python - urllib.error.URLError:<urlopenエラーがタイムアウトしました>
- 8. Distributed Erlang:multicallが要求されたタイムアウトを超過しました
- 9. Kafkaのブローカがキューのスパイクを要求し、ストリームのタイムアウト例外が発生しました
- 10. タイムアウトが無限のHttpClientがタイムアウト例外をスローする
- 11. IIS要求タイムアウト
- 12. インターネットトランスファコントロール要求タイムアウト
- 13. webdriverをタイムアウト例外
- 14. タイムアウト例外
- 15. モカチャイ要求タイムアウト私はlogginをテストするために、チャイ・エージェントを使用していres.json
- 16. Python - aiohttpは継続的にタイムアウトを要求します
- 17. "System.Web.HttpException:要求がタイムアウトしました。" Response.writeのエラー
- 18. iOS/RestKit - 要求のタイムアウトが発生しました
- 19. ODP.NET接続要求のタイムアウトが発生しました
- 20. 私はFormsAuthenticationクッキーをタイムアウトに設定したいが、コードは
- 21. Corba要求のタイムアウト
- 22. WebClientの要求タイムアウト
- 23. PythonでのHTTP要求でのタイムアウト
- 24. WCFタイムアウト例外! 'System.TimeoutException'型の例外がmscorlib.dllで発生しました
- 25. Python unittest assertRaisesがassertRaisesが失敗したときに例外をスローする
- 26. サーバが応答した後のApache HttpClientのタイムアウト例外
- 27. Xcode 7.1 "要求がタイムアウトしました。"エラー
- 28. Php - Azure 500 - 要求がタイムアウトしました
- 29. AWS S3ダウンロードiOS - 要求がタイムアウトしました
- 30. MKLocalSearch要求がタイムアウトしましたNSErrorFailingURLStringKey = https://gsp-ssl.ls.apple.com