2017-03-07 3 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) 

을 테스트 그러나하려면 테스트 케이스의 예외 부분. 나는 아마 대신 OSError가 던져 질 것이다 실제로 만드는 조건의 모든 문제를 통해가는, 당신이 필요로하는 예외를 던질 방법을 조롱하는 것 장고 프레임 워크를

+0

oserror ex : os.remove ('file')를 제공하지만 파일이 존재하지 않는 파일에서 작업 할 수 있습니다. –

+0

예외를 발생시키는 함수를 조롱하고 부작용으로 예외를 지정합니다. https://docs.python.org/3/library/unittest.mock.html#quick-guide –

답변

0

가장 좋은 방법을 사용하고 있습니다 그런데 . 장난감 예 : 당신이 가장 가능성이 당신이 제공 한 정보 제공 조금 다른 설정이 (가로 열심히해야합니다 다른 구조를 가진 자신의 프로젝트에 대한 모든 그래서 내가 말했듯이 지금

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()가에있는 모듈의 호출을 조롱해야합니다, 당신의 fun() 내부에 OSError 예외가 발생합니다 좋은 장소를 모의 객체에 최대 읽기 시작 :.

  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' 행을 검사하기위한 테스트를 작성하려고합니다. 그 때문에'pytest.raises (IOError) :'를 사용하여 오류가 발생하지만'DID NOT RAISE'가 표시됩니다. –