2016-08-30 2 views
2

처음에 나는 그렇게 같은 클래스의 두 객체가 내가 좋아하는 뭔가 않았다 운영자 <>=를 사용하여 비교할 수 없습니다 것을 테스트하려면 unittest 프레임 워크를 사용하지 않은 unittest 모듈을 사용하기 시작합니다. 따라서 테스트를 동일한 모듈로 작성하는 방식으로 테스트를 변환하고 있습니다. o1 < o2 시도 운영자 <를 호출하기 때문에하는 경우, 대신에 함수에 대한 참조가되는,연산자를 어설 션하는 방법 < and > = 구현되지 않았습니까? 그 후</p> <pre><code>try: o1 < o2 assert False except TypeError: pass </code></pre> <p>하지만, 내가하기로 결정 :

self.assertRaises(TypeError, o1 < o2) 

을하지만이 잘 작동을하지 않습니다 :

내가 가진 위와 동등한 일을 수행하려고했다 테스트의 일부로 호출 될 수 있습니다.

함수에서 o1 < o2을 감쌀 필요없이 내가 원하는 것을 성취 할 수있는 방법이 있습니까? 컨텍스트 매니저로

답변

5

사용 assertRaises :

with self.assertRaises(TypeError): 
    o1 < o2 

Herewith 문에 대한 설명입니다. Here은 문서입니다. TL : DR은 실행, 오류 처리 등의 전후에 설정 및 처분되는 "컨텍스트"를 가진 코드 블록의 실행을 허용합니다.

assertRaises의 경우 컨텍스트 관리자 __exit__ 메소드로 전달 된 exc 애질런트를 검사하여 필요한 유형의 실행이 발생했는지 여부를 확인합니다.

+0

어떻게 실제로 작동합니까? 이 논리 뒤에있는 논리는 무엇입니까? – nbro

+0

제 편집을 참조하십시오. –

+0

@ Nuncameesquecideti 꽤 많은 담당자를 얻은 사용자에게는 질문에 대한 대답을 수락하지 않는 것 같습니다. 이 특정 답변을 수락하지 않은 이유가 있습니까? 요청한 배경 정보도 제공했습니다. –