2017-03-07 40 views
2

私はviews.pypytestで例外を発生させるには?

def fun(): 
    try: 
     --Do some operation-- 
    except OSError: 
     --Do something else-- 

にコードを書いていると私は、コードの合計機能をカバーするためにテストケースを書かれています。私はこのエラーをカバーするために、「OSErrorのを」上げる方法

response = client.post(reverse('my_views_funurl'), follow=True) 
E   Failed: DID NOT RAISE 
を取得しています、一部は、私はそれが「OSErrorのを」引き上げる次のコードを書かれている「以外」

with pytest.raises(OSError): 
    response = client.post(reverse('my_views_funurl'), follow=True) 

をテストするだけにテストケースの例外部分。 ところで私はdjangoフレームワークを使用しています

+0

oserror ex:os.remove( 'file')を与えるファイルは存在しませんが、ファイルは存在しません。 –

+0

例外を発生させ、例外を副作用として与えるべき関数を模擬します。 https://docs.python.org/3/library/unittest.mock.html#quick-guide –

答えて

0

実際にはOSErrorがスローされる条件を作成するのではなく、必要な例外をスローするための方法を模擬することをお勧めします。おもちゃの例:あなたが最も可能性の高いあなたが提供する情報与えられたビット異なるセットアップが(それが難しいが必要になります異なる構造を使用して独自のプロジェクトのために、すべてのように、私が言ったように今

from unittest.mock import Mock 

def something(): 
    ... 

something = Mock(side_effect=OSError('Your error text')) 

>>> something() 
>>> Traceback (most recent call first): 
>>> ... 
>>> OSError: Your error text 

は、それが、唯一のおもちゃの例ですどのように正確に見えるかを知る)。あなたには、いくつかのコールがあなたのfun()OSError例外がスローされますことを期待している場合たとえば、あなたはモジュールfun()にコールをモックする必要がありますに位置して良い場所をモック上に読み込みを開始する:。

  1. Docks quick guide
  2. Patch documentation'where to patch'部分に、特に細心の注意を払う)
  3. Useful in-depth example on stack-overflow。私の実証実例より少し洗練されているので、達成しようとしているものに似ているでしょう。
+0

次のエラーが表示されます。pytest.raises(OSError): > response = client.post(reverse( ' follow = True) E失敗:DID NOT RAISE –

+0

予期している例外をどのような方法でスローする必要がありますか? 'hard_delete_drive()'なのか、それともビューの中のものなのでしょうか?それは何のモジュールですか? – cegas

+0

'hard_delete_drive()'はviews.pyの関数であり、try-exceptメソッドを使ってエラーを捕捉しています。私はこの関数で 'OSError'と' IOError'をキャッチしています。私は 'OSError'と' IOError'の行をカバーするテストを書いています。そのために 'with pytest.raises(IOError):'を使用してエラーを発生させていますが、 'DID NOT RAISE'を取得しています。 –

関連する問題